ruby - 为什么符号不等于符号

标签 ruby

我做到了:

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:fooy 赋值也会在表达式右侧计算时发生,结果包含在分配给 x 的数组文字中。

这是你想要做的:

x, y = :foo, %q{foo}.to_sym; x == y # => true

顺便说一句,x.==(y) 之所以有效,是因为 :== 在技术上是一种方法,但在惯用的 Ruby 中,您只需编写 x = = y。口译员知道你的意思。

关于ruby - 为什么符号不等于符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54698820/

相关文章:

ruby-on-rails - Rails 茧 gem : Undefined Method 'new_record?' on link_to_remove_association with Wicked

javascript - 如何在 Javascript 中调用 ruby​​ 值

ruby-on-rails - 将 JRuby 与 Rails 3.2 结合使用

ruby - 您已经激活了 rack 1.3.2,但是您的 Gemfile 需要 rack 1.2.3。考虑使用 bundle exec

ruby - Rails 将上传文件 "\xDE"从 ASCII-8BIT 解析为 UTF-8

Ruby Rescue 显示完整的回溯

ruby-on-rails - Ruby Devise,SessionsController.create,json - 获取 NameError : undefined 'build_resource' ?

ruby-on-rails - 在 Rails 中,如何像 AngelList 那样为任意字符串生成路由?

ruby - 能否将 Ruby HTTPI 库配置为遵循重定向?

ruby-on-rails - 如何去除 postgresql 噪音