我想知道是否或如何将函数映射到哈希值。
例如:----开始上课------------
def foo(var)
return var + 2
end
hash_var = { func => foo() }
----结束课堂--------------
这样我以后可以打电话
Class::hash_var["func"][10]
或者
Class::hash_var["func"](10)
那将返回12?
你可以使用method
方法。
def foo(var)
return var + 2
end
hash_var = { :func => method(:foo) }
hash_var[:func].call(10)
函数/方法是 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
您可以将值设置为 Proc 并调用它。
hash_var = {
'func' => proc {|x| x+2}
}
hash_var['func'].call(10) #=> 12
尝试使用 lambda
hash_var = { :func => lambda { |var| var + 2 }}
hash_var['func'].call(5) #=> 7
另一种选择是:
def foo(name)
puts "Hi #{name}"
end
def bar(numb)
puts numb + 1
end
hash_var = { func: :foo, func2: :bar }
send hash_var[:func], "Grid"
# => Hi Grid
send hash_bar[:func2], 3
# => 4
以下是有关#send方法的一些信息send() 在 Ruby 中的作用是什么?