Это то, что я пытаюсь сделать:Ruby - Можно передать блок как параметр как фактический блок для другой функции?
def call_block(in_class = "String", &block)
instance = eval("#{in_class}.new")
puts "instance class: #{instance.class}"
instance.instance_eval{ block.call }
end
# --- TEST EXAMPLE ---
# This outputs "class: String" every time
"sdlkfj".instance_eval { puts "class: #{self.class}" }
# This will only output "class: Object" every time
# I'm trying to get this to output "class: String" though
call_block("String") { puts "class: #{self.class}" }
На линии, где он говорит: «instance.instance_eval {block.call}», я пытаюсь найти другой способ, чтобы сделать новую переменную экземпляра запустить экземпляр eval на блоке. Единственный способ, с помощью которого я могу заставить это сделать, - передать экземпляр_начального исходного блока, а не как переменную или что-то еще, а как настоящий блок, как в тестовом примере.
Любые советы?
Что ??? Это было так просто? Ахахах спасибо! Я застрял на этом один день! :) –
термин для поиска был 'block parameters'; проще задним числом, хотя :) – Gishu