Подтвердить что ты не робот

Вызывать 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

Может ли кто-нибудь помочь мне заставить его работать?

4b9b3361

Ответ 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' при необходимости.