在哈希表中存储函数

3
我知道在Ruby中你可以像这样创建哈希映射:
hash = {"name"=>"John"}

但是能否有一个方法的哈希表呢:
hash = {"v"=> show_version}

当调用hash["v"]时,是执行show_version函数,还是返回传递给某个特殊方法的指针,以便执行来自哈希表的函数?

我的目标是拥有一个方法的哈希映射表,而不是使用case/when结构,因为我认为它看起来太冗长。


1
哈希表 = { :v => lambda { puts '已调用'; }} 或者 哈希表 = { :v => self.class.instance_method(:方法名)} - Aleksei Matiushkin
@mudasobwa,非常感谢!!! - Andy Res
1个回答

10

并不完全像这样,需要获取该方法的 Method 代理对象并将其存储在 Hash 中:

hash = { 'v' => method(:show_version) }

你需要调用 Method 对象:

hash['v'].()

MethodProc 进行了鸭子类型,因此您甚至可以将简单的 Proc 存储在 Hash 中,而无需区分它们,因为两者都可以通过相同的方式调用:

hash['h'] = -> { puts 'Hello' }
hash['h'].()
# Hello

此外,您可以以以下方式传递参数: hash ['h'] =->(param){puts“hello# {param}”} hash ['hello'].('world') #你好世界 - betomoretti
要传递参数,只需将其添加到()中,如下所示: hash['h'].('11')当然,方法应该像这样: puts "版本号 #{number}" end``` - Oscar Luza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接