ruby - 将函数存储在哈希中键的值中
问题描述
现在,我的 ruby 代码如下所示:
case step
when 1
# step_two_function
when 2
# step_three_function
when 3
# step_four_function
end
但是,我想知道是否可以将其存储在哈希中以使事情更简单一些?
例如,
h = {
1 => step_two_function,
2 => step_three_function,
3 => step_four_function,
}
并且能够简单地使用类似h[step]
. 看起来,在 Ruby 中,函数在创建哈希的同时执行,而不是仅在调用键的值时执行。
这样做有可能吗?如果可以,怎么做?
在 python 中,您只需执行以下操作:
>>> def lies(altons_var):
... print(altons_var)
...
>>> a[1] = lies
>>> a[1]('print me please')
print me please
但这在 Ruby 中不起作用,因为在您调用函数的那一刻(无论是直接调用还是从散列调用),它都会执行该函数。
解决方案
使用 Proc 或 Lambda 作为哈希值
您所追求的功能可能最好由Proc或lambda表示。这些对象是可以在以后传递和执行的闭包。作为一个有些人为的例子,请考虑以下代码:
step = {
1 => ->{p "foo"},
2 => ->{p "bar"},
3 => ->{p "baz"},
}
step.keys.map { |i| step[i].call }
#=> ["foo", "bar", "baz"]
散列中的每个值都包含一个“存根 lambda”,您可以使用Proc#call方法调用它。usingstep.keys.map
简单地遍历散列中的所有键并依次调用每个键,但您也可以从散列中调用单个 lambdastep[1]
或类似。
推荐阅读
- reactjs - Google Cloud 触发器构建 - NextJs 应用程序在本地构建 docker 映像,但不在 Gcloud 上
- asp.net-mvc - 如何从动态生成的表单中收集数据?
- python - 如何编写监控存储桶的云函数?
- android - 在具有相对布局父级的片段中使用持久底部表
- c# - 使用两个参数(字符串,整数)来定义字符串输出中特定字符的最大数量
- python - 我如何计算提到的 X 的数量?
- c++ - 传递模板以供以后在其他结构/类上下文中使用
- azure - 在 DeployIfNotExist 天蓝色策略中指定托管标识的位置
- c++ - 打包类的内存布局+继承
- django - 如何在django过滤查询中使用大于和小于或等于