ruby - 为什么我在三元条件下会得到意想不到的结果?

标签 ruby

谁能给我解释一下这个结果:

(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo
=> false

我预计它会返回:

=> "Foo"

最佳答案

(trad = {foo: "Foo", bar:"Bar"}).has_key? :foo ? trad[:foo] : :foo

就像:

(trad = {foo: "Foo", bar:"Bar"}).has_key? (:foo ? trad[:foo] : :foo)

:富? trad[:foo] : :foo 被评估为 "Foo" 因为 :foo 被视为真值。

(trad = {foo: "Foo", bar:"Bar"}).has_key? “Foo” 产生 false 因为没有“Foo”键。


使用以下(用括号覆盖优先级)获得预期结果:

>> ((trad = {foo: "Foo", bar:"Bar"}).has_key? :foo) ? trad[:foo] : :foo
=> "Foo"

Hash#fetch(key, default)似乎更合适:

>> {foo: "Foo", bar:"Bar"}.fetch(:foo, :foo)
=> "Foo"
>> {foo: "Foo", bar:"Bar"}.fetch(:baz, :baz)
=> :baz

关于ruby - 为什么我在三元条件下会得到意想不到的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19034547/

相关文章:

ruby-on-rails - Rails - 在 flash 通知中传递变量

.net - 使用 Ruby 调用 MS .Net Web 服务

css - Sass::SyntaxError on Rails 生产预编译

ruby - Ruby 中的单例方法有任何异常(exception)吗?

ruby-on-rails - 使用 form_for 和 form_tag 同时传递参数

ruby - 无法将编码为 "["的 "gb2312"转换为 ruby​​1.9.3 中的 "utf-8"

ruby-on-rails - 用户中的 Stripe::InvalidRequestError::RegistrationsController#create

ruby - 通过 ADO 连接将十进制值添加到 excel

ruby-on-rails - 使用从ruby中的方法返回的散列在一行中分配多个变量

ruby - 如何从此 Ruby 函数中删除重复项?