вызывать proc с instance_eval с аргументами? - PullRequest
31 голосов
/ 03 мая 2010

Я знаю, что это работает:

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 Ответ

58 голосов
/ 03 мая 2010

Используйте 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', если необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...