mde*_*tis 1 ruby syntax equality case
Ruby语法参考说明了case语句:
比较由运营商完成
===
事实上,例如:
ruby -e 'puts (1..3) === 2'
Run Code Online (Sandbox Code Playgroud)
打印true,但是:
ruby -e 'puts "foo" === /foo/'
Run Code Online (Sandbox Code Playgroud)
打印false,还:
ruby -e 'puts :foo === /foo/'
Run Code Online (Sandbox Code Playgroud)
打印false,但所有这些示例都是case语句的成功条件.它是如何工作的?
该===运营商是不可交换的,这意味着,"foo" === /foo/和/foo/ === "foo"是两个完全不同的事情.并且case语句使用后一种顺序.
事实上,您使用范围的第一个示例已经显示正在使用该订单.2 === (1..3)不行,就像你的第二个和第三个例子没有.
选择顺序的原因也很明显,至少如果你熟悉Ruby和OO设计中的运算符一般是如何运作的话.
该===操作是正常的方法,所以写的另一种方式/foo/ === "foo"是/foo/.===("foo")-而且这个顺序是有意义的,因为正则表达式不知道这是否是一个字符串匹配,但字符串没有正则表达式的概念,不知道是否会被匹配一个人.扩展到第一个示例,范围确实知道元素是否是其中的一部分,但元素不知道它是否是范围的一部分.