在我的Rails应用程序中,我有这个(相当愚蠢)的方法:
def my_method(param)
foo = "hey"
bar = "ho"
if param == :foo
return foo
elsif param == :bar
return bar
end
end
我不喜欢if/else
块。
如果提供foo
作为参数,是否有更简单的方法可以返回局部变量:foo
的值?
或者我必须在这里使用数组或哈希吗?
答案 0 :(得分:3)
如果您使用的是最新的Ruby,则可以使用binding.local_variable_get(param)
。哈希对我来说似乎更干净,但你的里程可能会有所不同。
答案 1 :(得分:2)
这应该看起来更简单,不要以为需要引入新的数据结构:
def my_method(param)
return 'hey' if param == :foo
return 'ho' if param == :bar
end
答案 2 :(得分:1)
您可以使用哈希:
def my_method(param)
objs = {
foo: "hey",
bar: "ho"
}
objs[param]
end
答案 3 :(得分:1)
这是使用case
声明的好时机:
def my_method(param)
case param
when :foo
'hey'
when :bar
'ho'
else
# what do you want to do here?
end
end
需要考虑的是,您使用的是if
/ elseif
,但如果这些都没有被击中,会发生什么?你想返回nil,还是陷入错误?当您浏览其他人的代码时,您有时会发现if
/ elseif
个测试的长链,没有最终else
,这会导致潜在的逻辑错误并导致一个难以找到的错误。