我做到了:
x = :foo, y = %q{foo}.to_sym, x.==(y)
# => [:foo, :foo, false]
我想知道为什么 :foo
不等于 :foo
。
最佳答案
并行赋值在 Ruby 中的工作方式不同,如果你想在一行中有多个语句,你需要用分号(而不是逗号)分隔它们。
你执行的语句:
x = :foo, y = %q{foo}.to_sym, x == y
相当于:
x = [:foo, y = %q{foo}.to_sym, x == y]
注意x
在计算表达式的右侧时尚未定义,因此最后一项有效地比较了 nil
和 :foo
。 y
赋值也会在表达式右侧计算时发生,结果包含在分配给 x
的数组文字中。
这是你想要做的:
x, y = :foo, %q{foo}.to_sym; x == y # => true
顺便说一句,x.==(y)
之所以有效,是因为 :==
在技术上是一种方法,但在惯用的 Ruby 中,您只需编写 x = = y
。口译员知道你的意思。
关于ruby - 为什么符号不等于符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54698820/