将函数存储在哈希中

时间:2014-12-25 09:04:56

标签: ruby hash

我知道在Ruby中你可以像这样创建哈希映射:

hash = {"name"=>"John"}

但是有可能有方法的哈希映射:

hash = {"v"=> show_version}

当调用hash["v"]执行show_version函数,或者在传递给某个特殊方法的指针上返回某种类型时,从哈希执行函数?

我想要实现的是,有一个方法的哈希映射,而不是使用case/when构造,因为它看起来太冗长了。

1 个答案:

答案 0 :(得分:6)

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

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

您需要call Method对象:

hash['v'].()

Method鸭子类型Proc,因此您甚至可以将ProcMethod一起存储在Hash中,并且不需要区分它们,因为它们都被称为相同的方式:

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