有什么区别
case item.class
when MyClass
# do something here
when Array
# do something different here
when String
# do a third thing
end
Run Code Online (Sandbox Code Playgroud)
和
case item.class
when MyClass.class
# do something here
when Array.class
# do something different here
when String.class
# do a third thing
end
Run Code Online (Sandbox Code Playgroud)
出于某种原因,这些中的第一个有时会起作用而第二个起作用,而其他时候,第二个起作用,而第一个起作用.为什么?哪一个是"正确"的方式呢?
可能重复:
在Ruby中=== vs. ==
我看到它最近使用了几次但却无法弄清楚它的作用.谁能说明它是如何工作的?
在Ruby中,==和===之间有什么区别?该RDoc的说
Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写以在case语句中提供有意义的语义.
是#==一样的==吗?你能举例说明在case语句中何时/如何使用它?
Ruby中的string.match(regex)和regex.match(string)有什么区别?在这种语言中使用这两种结构的理由是什么?
据我所知,===操作员测试RHS对象是否是LHS对象的成员.那讲得通.但是这在Ruby中是如何工作的?我正在看Ruby文档,我只看到===定义Object,我自己也看不到它Integer.它没有记录吗?
为什么我会"大拇指"?
p = Post.new
case p.class
when Post
"Thumbs up"
else
"Thumbs down"
end
Run Code Online (Sandbox Code Playgroud) 这事实上TypeOfClass === TypeOfClass是false给我的印象是反直觉.在以下代码中,即使field.class是同一个类,它的计算结果为false:
case field.class
when Fixnum, Float
field + other_field
when Date, DateTime, Time
field
else
puts 'WAT?'
end
Run Code Online (Sandbox Code Playgroud)
我这样做了:
Fixnum === Fixnum # => false
Class === Class # => true
Run Code Online (Sandbox Code Playgroud)
我发现另一个线程:
Integer === 3 # => true
Fixnum === 3 # => true
3.class # => Fixnum
Run Code Online (Sandbox Code Playgroud)
我找不到这种语言设计的原因.语言设计师在这种行为中思考的是什么?
我认为这与另一个帖子中提供的答案有关.假设Numeric === Integera Integer是一种更具体的类型,这并不是不自然的Numeric.但是,它不是:
Numeric === Integer #=> false
Run Code Online (Sandbox Code Playgroud)
我认为case陈述或 …