【发布时间】:2021-07-19 08:41:19
【问题描述】:
似乎可以通过在方法后面附加参数并用空格分隔两者来将参数传递给某些 Ruby 方法。我试图了解使这种情况发生的机制。这就是在命令行中将参数传递给脚本的方式。为什么以下语句在 Ruby 中有效?
item = 'orange'
fruits = ['orange', 'grapefruit', 'apple']
x = fruits.include? item
puts x
为什么下面的语句不起作用?
item = 'orange'
fruits = ['orange', 'grapefruit', 'apple']
x = fruits.include? item ? 'You picked a fruit' : 'You did not pick a fruit'
puts x
【问题讨论】:
-
在 Ruby 中,调用方法时可以省略括号。
fruits.length与fruits.length()相同。同样,fruits.include? item与fruits.include?(item)相同。 -
有道理。我编辑了问题以添加第二个陈述。我想第二个语句没有按预期工作,因为三元语句作为参数传递给
include?方法? -
x = fruits.include? item ? 'You picked a fruit' : 'You did not pick a fruit'被评估为x = fruits.include? (item ? 'You picked a fruit' : 'You did not pick a fruit')->x = fruits.include? "You picked a fruit"返回false。您可以使用x = fruits.include?(item) ? 'You picked a fruit' : 'You did not pick a fruit'或x = (fruits.include? item) ? 'You picked a fruit' : 'You did not pick a fruit'来消除歧义(我推荐前者)。 -
@ArunKumarMohan 谢谢,这是有道理的!您能否粘贴您的 cmets 作为答案,我会接受吗?
-
类似地,在以单行格式传递块时,您必须使用括号,例如
arr.each_slice 2 { |slice| puts slice }无效但arr.each_slice(2) { |slice| puts slice }有效