我想知道是否或如何将函数映射到散列值。
例如: ----开始上课------------
def foo(var)
return var + 2
end
hash_var = { func => foo() }
----结束班--------------
以便我以后可以打电话
Class::hash_var["func"][10]
或
Class::hash_var["func"](10)
那将返回12?
答案 0 :(得分:8)
您可以使用method
方法。
def foo(var)
return var + 2
end
hash_var = { :func => method(:foo) }
hash_var[:func].call(10)
答案 1 :(得分:3)
您可以将值设置为Proc并调用它。
hash_var = {
'func' => proc {|x| x+2}
}
hash_var['func'].call(10) #=> 12
答案 2 :(得分:2)
尝试使用lambdas
hash_var = { :func => lambda { |var| var + 2 }}
hash_var['func'].call(5) #=> 7
答案 3 :(得分:2)
函数/方法是Ruby中为数不多的不是对象的东西之一,因此不能将它们用作散列中的键或值。与作为对象的函数最接近的是proc。所以你最好使用这些......
其他答案几乎列出了如何将proc作为值放入哈希的所有可能方法,但我会总结它;)
hash = {}
hash['variant1'] = Proc.new {|var| var + 2}
hash['variant2'] = proc {|var| var + 2}
hash['variant3'] = lambda {|var| var + 2}
def func(var)
var + 2
end
hash['variant4'] = method(:func) # the *method* method returns a proc
# describing the method's body
还有不同的评估过程的方法:
hash['variant1'].call(2) # => 4
hash['variant1'][2] # => 4
hash['variant1'].(2) # => 4
答案 4 :(得分:0)