eee*_*ean 4 ruby string boolean equality
当这不像我预期的那样工作时,我变得很好奇:
var = "foo"
case var.class
when String
puts "bar"
else
puts "baz"
=> "baz"
Run Code Online (Sandbox Code Playgroud)
我理解case语句正在使用===,但我不明白是什么===.文件说......
Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写,以在case语句中提供有意义的语义.
http://ruby-doc.org/core-2.2.3/Object.html#method-i-3D-3D-3D
这是否意味着===在Class(或其中一个模块)中覆盖===Object?我糊涂了.
===被覆盖的Class对象(更一般地说,Module对象)意味着"右侧是左侧的一个实例".
例如:
>> String === ""
=> true
>> Class === String
=> true
Run Code Online (Sandbox Code Playgroud)
这是不直观的,但这是真的.但是,它确实会使您尝试做的更短:
var = "foo"
case var
when String
puts "bar"
else
puts "baz"
end
# outputs "bar", since String === "foo"
Run Code Online (Sandbox Code Playgroud)
这就是你的尝试不起作用的原因:Ruby评估String === String,这是错误的,因为String类本身不是一个字符串.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |