gpt4 book ai didi

ruby - 具有 "defined?"的三元表达式返回 "expression"而不是值?

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:12 26 4
gpt4 key购买 nike

我是 Ruby 和 Rails 的新手,但即使在搜索堆栈溢出和谷歌之后我也找不到答案。

我有一个简单的 Ruby 简写 if 语句,它应该像这样返回一个 integer:

# in the context of this erb document `amount` is defined as 5.
@c = ( defined? amount ? amount : r( 1,4 ) )

r() 是一个自定义辅助函数,它返回 在本例中 1 和 4 之间的随机数。

我希望它工作的方式是 if amount 被定义,然后使用定义为 amount 的数字,else 生成一个介于 1 和 4 之间的随机数并使用它。

然而,当打印出 @c 时,Ruby 输出的是 expression 而不是数字。

我需要做什么才能使它按我的预期工作,我做错了什么?

非常感谢阅读!

最佳答案

defined? 是否绑定(bind)到 amount ?数量:r(1,4) 所以它等同于:

defined?(amount ? amount : r(1,4))

你可能想要:

defined?(amount) ? amount : r(1,4)

实际上,数量 || 的可能性很大r(1,4)amount.nil? ? r(1,4) : amount 会更好地匹配你想要的,因为我认为你不想要这个:

1.9.3p194 :001 > defined?(amount) => nil 1.9.3p194 :002 > amount = nil => nil 1.9.3p194 :003 > defined?(amount) => "local-variable" 

...在这种情况下 @c 将是 nil - 已定义变量的值。

关于ruby - 具有 "defined?"的三元表达式返回 "expression"而不是值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10467523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com