现在,我的 ruby 代码如下所示:
case step
when 1
# step_two_function
when 2
# step_three_function
when 3
# step_four_function
end
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否可以将其存储在哈希中以使事情更简单一些?
例如,
h = {
1 => step_two_function,
2 => step_three_function,
3 => step_four_function,
}
Run Code Online (Sandbox Code Playgroud)
并且能够简单地使用类似h[step]. 似乎在 Ruby 中,函数在创建哈希的同时执行,而不是仅在调用键的值时执行。
这样做是否可行,如果可以,如何做?
在 python 中,您只需简单地执行以下操作:
>>> def lies(altons_var):
... print(altons_var)
...
>>> a[1] = lies
>>> a[1]('print me please')
print me please
Run Code Online (Sandbox Code Playgroud)
但这在 Ruby 中不起作用,因为在您调用函数的那一刻(无论是直接调用还是从散列调用),它都会执行该函数。
您所追求的功能可能最好由Proc或lambda 表示。这些对象是可以传递并稍后执行的闭包。作为一个有点人为的示例,请考虑以下代码:
step = {
1 => ->{p "foo"},
2 => ->{p "bar"},
3 => ->{p "baz"},
}
step.keys.map { |i| step[i].call }
#=> ["foo", "bar", "baz"]
Run Code Online (Sandbox Code Playgroud)
散列中的每个值都包含一个“stubby lambda”,您可以使用Proc#call方法调用它。使用step.keys.map简单地迭代散列中的所有键并依次调用每个键,但您也可以从散列中调用单个 lambdastep[1]或类似。
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |