加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 为什么“foo”.class === String返回false?

发布时间:2020-12-17 03:42:19 所属栏目:百科 来源:网络整理
导读:当这不像我预期的那样工作时,我变得很好奇: var = "foo"case var.classwhen String puts "bar"else puts "baz"= "baz" 我理解case语句是使用===,但我不明白===是什么.文件说…… Case Equality – For class Object,effectively the same as calling #==, b
当这不像我预期的那样工作时,我变得很好奇:

var = "foo"
case var.class
when String
  puts "bar"
else
  puts "baz"
=> "baz"

我理解case语句是使用===,但我不明白===是什么.文件说……

Case Equality – For class Object,effectively the same as calling #==,
but typically overridden by descendants to provide meaningful
semantics in case statements.

http://ruby-doc.org/core-2.2.3/Object.html#method-i-3D-3D-3D

这是否意味着在类(或其中一个模块)中的===会覆盖对象中的===?我糊涂了.

解决方法

对于Class对象(更一般地说,Module objects)重写===表示“右侧是左侧的实例”.

例如:

>> String === ""
=> true
>> Class === String
=> true

这是不直观的,但这是真的.但是,它确实会使您尝试做的更短:

var = "foo"
case var
when String
  puts "bar"
else
  puts "baz"
end
# outputs "bar",since String === "foo"

这就是你的尝试不起作用的原因:Ruby评估String === String,这是假的,因为String类本身不是一个字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读