为什么"foo"不是===到/ foo /当比赛成功时?

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语句的成功条件.它是如何工作的?

Dom*_*nef 7

===运营商是不可交换的,这意味着,"foo" === /foo//foo/ === "foo"是两个完全不同的事情.并且case语句使用后一种顺序.

事实上,您使用范围的第一个示例已经显示正在使用该订单.2 === (1..3)不行,就像你的第二个和第三个例子没有.

选择顺序的原因也很明显,至少如果你熟悉Ruby和OO设计中的运算符一般是如何运作的话.

===操作是正常的方法,所以写的另一种方式/foo/ === "foo"/foo/.===("foo")-而且这个顺序是有意义的,因为正则表达式不知道这是否是一个字符串匹配,但字符串没有正则表达式的概念,不知道是否会被匹配一个人.扩展到第一个示例,范围确实知道元素是否是其中的一部分,但元素不知道它是否是范围的一部分.