“===”运算符在Ruby中做什么? [重复]

Possible Duplicate:
07000

我看到它最近使用了几次,但不能弄清楚它做了什么。任何人都可以说明它是如何工作的?

就像Ruby中的每一个其他方法一样(或者实际上几乎任何面向对象的语言)

a === b

意味着任何作者的一个类想要它的意思。

但是,如果你不想混淆你的同事,约定是===是case包含运算符。基本上,它是一个布尔运算符,它提出问题“如果我有一个抽屉标记为一个将它放在抽屉里有意义吗?

一个替代公式是“如果一个描述的集合,将是该集合的成员?

例如:

 (1..5) === 3           # => true
 (1..5) === 6           # => false

Integer === 42          # => true
Integer === 'fourtytwo' # => false

  /ell/ === 'Hello'     # => true
  /ell/ === 'Foobar'    # => false

===运算符的主要用法是在case表达式,从

case foo
when bar
  baz
when quux
  flurb
else
  blarf
end

被翻译成某种东西(大致)

_temp = foo

if bar === _temp
  baz
elsif quux === _temp
  flurb
else
  blarf
end

注意,如果要搜索此运算符,通常将其称为三元等于运算符或三元运算符或大小写相等运算符。我真的不喜欢这些名字,因为这个运算符绝对没有什么关于平等。

特别地,期望等式是对称的:如果a等于b,则b更好地等于a。此外,可以期望等价是传递性的:如果a == b和b == c,则a == c。虽然没有办法真正保证在像Ruby这样的单调度语言中,你至少应该努力保持这个属性(例如,通过遵循coerce协议)。

然而,对于===没有期望对称性或传递性。事实上,它是非常由设计不对称。这就是为什么我不喜欢调用任何甚至远远类似于平等的东西。这也是为什么我认为,它应该被称为别的东西像~~~或什么。

http://stackoverflow.com/questions/4467538/what-does-the-operator-do-in-ruby

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:“===”运算符在Ruby中做什么? [重复]