两个数字比较,如下所示:
#!/usr/bin/ruby
a=1000, b=1000, c=1000, d=1000
puts a==b, c==d
Run Code Online (Sandbox Code Playgroud)
但打印:
false
true
Run Code Online (Sandbox Code Playgroud)
为什么Ruby比较这样的结果?
Ruby在一行上设置多个变量的快捷方式与C-esque语言略有不同.
正如SimpleLime的答案中所指出的,您使用的语法实际上会创建a变量的数组.
正如另一个在评论中指出的那样,编写示例的方式将评估如下:
a = [1000, (b = 1000), (c = 1000), (d = 1000)]
Run Code Online (Sandbox Code Playgroud)
虽然b,c和d设定为预期的,a其实不然.a设置为数组,而b,, c和d设置为1000,因为variable = value实际上是一个返回给定值的方法调用.
您真正想要的Ruby语法如下所示:
a, b, c, d = 1000, 1000, 1000, 1000
Run Code Online (Sandbox Code Playgroud)
或它实际评估的内容:
a, b, c, d = [1000, 1000, 1000, 1000]
Run Code Online (Sandbox Code Playgroud)
如果所有值都相同,您还可以使用非常常见的其他快捷语法.
a = b = c = d = 1000
Run Code Online (Sandbox Code Playgroud)
但是如果不使用"值"类型(例如数值或布尔值),请注意此语法,因为所有对象将共享相同的引用.
在ruby中,您不需要使用方括号[]来创建数组.所以你的变量创建线没有按照你的想法行事:
a=1000, b=1000, c=1000, d=1000
p a # [1000, 1000, 1000, 1000]
p b # 1000
p c # 1000
p d # 1000
Run Code Online (Sandbox Code Playgroud)
那么,a == b比较数组[1000, 1000, 1000, 1000] == 1000,这显然是错误的