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