如何通过参数调用方法中的局部变量值?

时间:2014-12-19 16:29:26

标签: ruby-on-rails ruby

在我的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的值?

或者我必须在这里使用数组或哈希吗?

4 个答案:

答案 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,这会导致潜在的逻辑错误并导致一个难以找到的错误。