class_eval如何将参数传递给方法

时间:2011-10-30 03:19:27

标签: ruby

如何在以下情况下传递参数名称...在传递给class_eval之前评估名称

 
class Foo

end

Foo.class_eval %Q{
def hello(name)
 p "hello #{name}"
end
}


很抱歉没有给出整个场景...... 我只想动态地向一个类添加一个实例方法,该方法应该能够接受参数... 上面的代码不会编译抱怨在irb ..执行时没有将名称定义为局部变量。

由于

4 个答案:

答案 0 :(得分:3)

其他答案是“正确”答案,但您也可以跳过p来电内插:

Foo.class_eval %Q{
  def hello(name)
    p "hello \#{name}"
  end
}

我认为您想要更改实际参数名称(可能对完成或在动态方法上使用Pry时有用),这里假设它在全局中,但也可以传递给执行class_eval的方法:

Foo.class_eval %Q{
  def hello(#{$argname})
    p "hello \#{$argname}"
  end
}

答案 1 :(得分:1)

非常简单:

Foo.class_eval do
    def hello(name)
        p "hello #{name}"
    end
end

答案 2 :(得分:0)

尝试将块传递给class_eval而不是数组(from this link):

class Foo
end

Foo.class_eval {
  def hello(name)
    p "hello #{name}"
  end
}

然后,您可以通常的方式调用实例方法hello

boo = Foo.new
boo.hello("you")

产生:

>> boo.hello("you")
"hello you"
=> nil

答案 3 :(得分:0)

class Foo
end

Foo.class_eval do
  define_method :hello do |name|
    p "hello #{name}"
  end
end

Foo.new.hello("coool") # => "hello coool"