函数将字符串作为参数,例如fn(“string”)。
我希望根据三个更多条件传递不同的值,一种稍微不可读的方法是:
fn(check_1 ? "yes" : check_2 ? "no" : "maybe")
我想用一个返回字符串的块替换参数。我希望我可以这样做:
fn({|arg| if check_1
arg = "yes"
elsif check_2
arg = "no"
else
arg = "maybe"
end
})
我可以有更多的条件,并且仍然可以写出所有这些,就好像这是一行。
我如何在Ruby中执行此操作?
答案 0 :(得分:3)
阻止很酷,但这并不意味着我们总是必须使用它。
恕我直言,使用单独的函数来获取要传递给fn
的字符串会更加清晰。
def arg w
if w.eql? "check_1"
"yes"
elsif w.eql? "check_2"
"no"
else
"maybe"
end
end
def fn s
puts s
end
fn(arg("check_1"))
fn(arg("check_2"))
fn(arg("check_3"))
或者使用Hash
作为练习留给您:)
答案 1 :(得分:1)
您可以使用if
表达式,甚至是case
表达式。见the PickAxe book。您想要做的一个例子就是在页面顶部。
答案 2 :(得分:1)
这听起来有点奇怪。您确定不想传入数组并处理方法中的参数吗?
无论哪种方式,它听起来像你要求的是lambda来处理逻辑,然后你可以将lambda传递给函数以返回实际结果。def test(parameter)
puts "I was passed the value: #{parameter}"
end
foo = lambda{|x,y,z|
if x == true
"yes"
elsif y == true
"no"
else
"maybe"
end
}
test(foo[false,true,false])
答案 3 :(得分:1)
arg= check_1&&"yes"||check_2&&"no"||"maybe"
答案 4 :(得分:1)
看起来你对积木有一些误解,但这完全是另一回事。
我认为这会对你有所帮助:
check_1 = false
check_2 = true
def foo(&block)
puts block.call
end
foo {
if check_1
arg = "yes"
elsif check_2
arg = "no"
else
arg = "maybe"
end
}