Ruby函数作为hash的值

时间:2012-10-23 15:20:39

标签: ruby function

我想知道是否或如何将函数映射到散列值。

例如: ----开始上课------------

def foo(var)
    return var + 2
end

hash_var = { func => foo() }

----结束班--------------

以便我以后可以打电话

Class::hash_var["func"][10]

Class::hash_var["func"](10)

那将返回12?

5 个答案:

答案 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)

另一个选择是:

Gemfile.lock

以下是有关#send方法What does send() do in Ruby?

的一些信息