- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
当发现这个时,我正在研究序列化值。 Ruby 有一个 TrueClass
类,和一个 FalseClass
类,但它没有 Boolean
类。我想知道这是为什么。
我发现使用 Boolean
有一些优势;例如,字符串解析可以集中在它上面。
Ruby 开发人员比我聪明,所以一定有很多我看不到的充分理由。但现在在我看来它像有 OneClass
和 TwoClass
而不是 Fixnum
.
最佳答案
类的目的是将相似的对象或具有相似行为的对象组合在一起。 1
和 2
非常相似,因此将它们放在同一个类中是完全合理的。 true
和 false
然而不相似。事实上,它们的重点是它们恰好是彼此的对立并且具有相反的行为。因此,它们不属于同一类。
您能否举例说明您将在 Boolean
类中实现哪种常见行为?我想不出任何东西。
让我们看看 TrueClass
和 FalseClass
的行为:那里正好有 四个 方法。不再。在每种情况下,这两种方法的作用完全相反。您如何以及为什么将它放在一个类中?
以下是您如何实现所有这些方法:
class TrueClass
def &(other)
other
end
def |(_)
self
end
def ^(other)
!other
end
def to_s
'true'
end
end
现在反过来:
class FalseClass
def &(_)
self
end
def |(other)
other
end
def ^(other)
other
end
def to_s
'false'
end
end
诚然,在 Ruby 中,有很多在幕后发生的“魔法”,它们实际上并不是由 TrueClass
和 FalseClass
处理的,而是硬连线的进入解释器。诸如 if
、&&
、||
和 !
之类的东西。然而,在 Smalltalk 中,Ruby 借鉴了很多东西,包括 FalseClass
和 TrueClass
的概念,所有这些也都是作为方法实现的,你可以做同样的事情在 ruby 中:
class TrueClass
def if
yield
end
def ifelse(then_branch=->{}, _=nil)
then_branch.()
end
def unless
end
def unlesselse(_=nil, else_branch=->{})
ifelse(else_branch, _)
end
def and
yield
end
def or
self
end
def not
false
end
end
反之亦然:
class FalseClass
def if
end
def ifelse(_=nil, else_branch=->{})
else_branch.()
end
def unless
yield
end
def unlesselse(unless_branch=->{}, _=nil)
ifelse(_, unless_branch)
end
def and
self
end
def or
yield
end
def not
true
end
end
几年前,我写上面的内容只是为了好玩和 even published it .除了由于 Ruby 使用特殊运算符而我只使用方法导致语法看起来不同之外,它的行为与 Ruby 的内置运算符完全一样。其实我其实是拿了the RubySpec conformance testsuite和 ported it over to my syntax它通过了。
关于ruby - 为什么 Ruby 有 TrueClass 和 FalseClass 而不是单一的 Boolean 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3192978/
来自文档:http://ruby-doc.org/core-2.2.0/TrueClass.html#method-i-7C true | puts("or") true || puts("logi
为什么我们不能在 Ruby 中初始化 TrueClass?我明白了: TrueClass.new # => NoMethodError: undefined method `new' for True
这是一个理论问题:是否可以将 FalseClass 的行为更改为像 TrueClass 一样?可以覆盖 to_s、xor、&、|行为,但这还不够。 如果你喜欢测试驱动开发,请听从我同事的建议: put
我在 custom.css.scss 文件的 {} 部分输入了一个拼写错误并保存了。然后将其改回原来的样子并再次保存。 然后,当我刷新浏览器时,我收到了标题为“NoMethodError in Sta
我正在使用Spree,并设置了spree_easy_contact扩展名。 当我发送电子邮件时,它会正确发送,并正确地将其保存到数据库,但是我被重定向到错误屏幕: NoMethodError in C
NilClass、TrueClass 和FalseClass 各有一个实例,即nil、true和false,它们是常量,拥有这些类的目的是什么?为什么它们不能是 Object 类的实例,并且所有相关方
我想弄清楚是否有一种简单的方法来执行以下操作,而不是将 to_i 方法添加到 TrueClass/FalseClass。 这是一个难题:我的 Rails 应用程序中有一个 bool 字段 - 显然在
我的模型中的这一特定行 validates :password, length: { minimum: 8 }, allow_nil: true, on: :create
在 acts_as_recommendable 插件中运行 rake 任务时出现 undefined method [] for true:TrueClass 错误。错误指向以下行。 items
我正在尝试测试我的 bool 字符串方法之一,但出现以下错误: undefined method `to' for true:TrueClass describe 'is_tall?' do it
我正在尝试测试我的 bool 字符串方法之一,但出现以下错误: undefined method `to' for true:TrueClass describe 'is_tall?' do it
我刚刚开始维护其他人的代码库,但我无法让它在生产环境中本地运行。预编译样式表时会出现错误。 这是一个在 Ruby 1.9.2 上运行的 Rails 3.2.6 应用程序。我注意到在下面的输出中,gem
我上传了一张按预期工作的图片,除非我向 ImageUploader 添加了一个额外的进程 (auto_orient)。代码如下: class ImageUploader [500, 500] v
当发现这个时,我正在研究序列化值。 Ruby 有一个 TrueClass类,和一个 FalseClass类,但它没有 Boolean 类。我想知道这是为什么。 我发现使用 Boolean 有一些优势;
我在 Rails 2.3.8 项目上使用 Devise 1.0.8。在我的 Controller 测试中,我有: context "when current_user is admin" do s
我不知道发生了什么,这让我脱发! 我试图让 cap:deploy 命令工作,然后,不知从哪里,我得到了这个错误:connection failed for: domain.com (NoMethodE
在运行我的 worker 时,我不断收到 undefined method '[]' for true:TrueClass 的间歇性错误。一半的时间它会工作,然后另一个它只是因为这个错误而失败。这似乎
为什么不能在Fixnum,Bignum,Float,上定义singleton方法Symbol类对象,但是FalseClass和TrueClass可以有吗? C:\>ruby -v ruby 2.0.0
将 rspec-rails 从版本 2.14.0 更新到 3.0.0.beta2 后,所有使用 be_true 的测试或 be_false 失败。 Failure/Error: user.new_r
我无法构建 rails sqlite3 gem。无论我安装 sqlite3-ruby 还是只安装 sqlite3,它都失败了。由于 sqlite3 是由 macports 安装的,所以它都在/opt/
我是一名优秀的程序员,十分优秀!