3 回答
TA贡献1942条经验 获得超3个赞
就像Ruby中的所有其他方法一样(实际上几乎是任何面向对象的语言),
a === b
表示a的课程作者想要表达的意思。
但是,如果你不想混淆最烦你的同事,该公约是===为案件包容操作。基本上,它是一个布尔运算符,它问一个问题:“ 如果我有一个标有抽屉的抽屉a,放入b那个抽屉有意义吗? ”
另一种说法是“ 如果a描述一个集合,将b成为该集合的成员吗? ”
例如:
(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
请注意,如果要搜索此运算符,通常将其称为三等号运算符或threequals运算符或大小写相等运算符。我真的不喜欢这些名称,因为此运算符与相等绝对无关。
特别是,人们期望平等是对称的:如果a等于b,那么b最好也等于a。同样,人们希望平等可以传递:if a == b和b == cthen a == c。尽管没有办法真正保证使用像Ruby这样的单调度语言,但是您至少应该努力保留此属性(例如,遵循coerce协议)。
但是,因为===没有对对称性或传递性的期望。事实上,它是由设计非常不对称。这就是为什么我不喜欢称呼它与远程平等相似的东西。这也是我认为的原因,应该将其称为其他名称~~~或类似名称。
TA贡献1963条经验 获得超6个赞
在Ruby中,===
运算符用于测试语句when
子句中的相等性case
。在其他语言中,以上是正确的。
据我所知,Ruby没有真正的运算符,它们都是在表达式的LHS上调用的方法,并传入表达式的RHS。因此,实际上,您可以覆盖类中想要的任何“运算符”,以执行所需的任何内容(类似于C ++中的运算符重载)。
- 3 回答
- 0 关注
- 630 浏览
添加回答
举报