ruby - 使用带参数的 instance_eval 调用 proc?

标签 ruby

我知道这行得通:

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

谁能帮我让它工作?

最佳答案

使用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 的新功能,因此如果需要,请升级或要求'backports'

关于ruby - 使用带参数的 instance_eval 调用 proc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2759210/

相关文章:

ruby-on-rails - 使用 Facebooker 和 Ruby on Rails 的 session 问题

ruby-on-rails - Rails 哈希树到数组

ruby-on-rails - Rails 设计验证 IP 地址

ruby-on-rails - 在 Rails 中按属性查找多个数据库对象?

ruby - 返回可以为多个的所有最大值或最小值

ruby-on-rails - 使用 rbenv 安装 ruby​​ gems 失败

ruby-on-rails - 更新 FactoryBot 特征中的关联对象

ruby - 需要什么方法才能让 "-"(减法)方法与 Ruby 数组一起使用?

ruby-on-rails - 如何将枚举与复选框 rails 一起使用

ruby-on-rails - Google Cloud Ruby : Error Response: [13] Timed out when starting VMs. 应用程序代码可能不健康。