9

関数をハッシュの値にマップできるかどうか、またはどのようにマップできるのか疑問に思いました。

例:----クラスの開始------------

def foo(var)
    return var + 2
end

hash_var = { func => foo() }

----エンドクラス--------------

後で電話できるように

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

また

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

そしてそれは12を返しますか?

4

5 に答える 5

10

メソッドを使用できますmethod

def foo(var)
      return var + 2
end

hash_var = { :func => method(:foo) }

hash_var[:func].call(10)
于 2012-10-23T15:26:32.197 に答える
4

関数/メソッドはRubyでオブジェクトではない数少ないものの1つであるため、ハッシュのキーまたは値として使用することはできません。オブジェクトである関数に最も近いものは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 

procを評価するさまざまな方法もあります。

hash['variant1'].call(2) # => 4
hash['variant1'][2]      # => 4
hash['variant1'].(2)     # => 4
于 2012-10-23T16:01:41.337 に答える
3

値をProcに設定して呼び出すことができます。

hash_var = {
  'func' =>  proc {|x| x+2}
}

hash_var['func'].call(10) #=> 12
于 2012-10-23T15:24:09.530 に答える
2

ラムダを使用してみてください

hash_var = { :func => lambda { |var| var + 2 }}
hash_var['func'].call(5) #=> 7
于 2012-10-23T15:27:55.737 に答える
0

別のオプションは次のとおりです。

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で何をしますか?

于 2019-04-03T17:59:24.723 に答える