Вызывать proc с помощью instance_eval с аргументами?
Я знаю, что это работает:
proc = Proc.new do
puts self.hi + ' world'
end
class Usa
def hi
"Hello!"
end
end
Usa.new.instance_eval &proc
Однако я хочу передать аргументы proc, поэтому я пробовал это, что не работает:
proc = Proc.new do |greeting|
puts self.hi + greeting
end
class Usa
def hi
"Hello!"
end
end
Usa.new.instance_eval &proc, 'world' # does not work
Usa.new.instance_eval &proc('world') # does not work
Может ли кто-нибудь помочь мне заставить его работать?
Ответы
Ответ 1
Используйте instance_exec
вместо instance_eval
когда вам нужно передать аргументы.
proc = Proc.new do |greeting|
puts self.hi + greeting
end
class Usa
def hi
"Hello, "
end
end
Usa.new.instance_exec 'world!', &proc # => "Hello, world!"
Примечание: это новое для Ruby 1.8.7, поэтому обновите или require 'backports'
при необходимости.