Ruby: Как сопоставить функцию с хешем

Я не могу понять, как назначить вызов функции рубиновому хешу. Я хочу назначить функцию хеш-ключу, а затем вызовите эту функцию, используя классический синтаксис поиска хэшей.

def Foo()
  puts "bar"
end

puts "Assigning"
test = { "foo" => Foo() }

puts "Executing"
test["foo"]

Этот код завершается ошибкой, функция Foo вызывается после того, как помещает «Assign» , во время создания хэша, и ничего не происходит после того, как помещает «Executing»

def Foo()
  puts "bar"
end

puts "Assigning"
test = { "foo" => Foo }

puts "Executing"
test["foo"]

с этим кодом я получаю неинициализированную константу Foo (NameError) .

Наконец, с

def Foo()
  puts "bar"
end

puts "Assigning"
test = { "foo" => :Foo }

puts "Executing"
test["foo"]

я не получаю выводов.

Есть предложения?

Спасибо всем за ответы и предложения.

Я собираюсь проверить если хеш-подход к вызову функции быстрее, чем эквивалентный код на основе операторов if / case .

funcs ["foo"]. call

жирнее, чем

if func_name == "foo" then
  Foo()
elsif ...
...
end

или

case func_name
when "foo"
  Foo()
when ...
  ...
end

Очевидно, для большого числа функций (~ 150) и сотни циклы вызовов

5
задан rico 11 August 2011 в 10:56
поделиться