将函数存储在哈希中

And*_*Res 1 ruby hash

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

hash = {"name"=>"John"}
Run Code Online (Sandbox Code Playgroud)

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

hash = {"v"=> show_version}
Run Code Online (Sandbox Code Playgroud)

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

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

Jör*_*tag 6

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

hash = { 'v' => method(:show_version) }
Run Code Online (Sandbox Code Playgroud)

而你需要callMethod对象:

hash['v'].()
Run Code Online (Sandbox Code Playgroud)

Methodduck-types Proc,所以你甚至可以ProcMethods中存储简单的s,Hash并且不需要区分它们,因为它们都以相同的方式被调用:

hash['h'] = -> { puts 'Hello' }
hash['h'].()
# Hello
Run Code Online (Sandbox Code Playgroud)