【问题标题】:define method to create method that accept variable定义方法来创建接受变量的方法
【发布时间】:2013-03-12 07:18:59
【问题描述】:

我有一个关于定义方法的问题。 我有这门课

class A
  def create_method(name,&block)
    self.class.send(:define_method, name, &block)
  end
end

a = A.new
a.create_method("dyn_meth") {puts "this is dynamic method"}
a.dyn_meth

我设法创建方法名称“dyn_meth”,但现在我想创建在正常情况下接受变量的方法名称“dyn_meth2”:

def dyn_meth2(var1,var2,&block)
    puts "var1 = #{var1} . var2 #{var2}
    block.call
end

如何使用define_method 来创建“dyn_meth2”?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    来吧!

    a.create_method("dyn_meth2") { |var| puts "var is #{var}" }
    a.dyn_meth2("monkey")
    #=> "var is monkey"
    

    如果你想在你的 arg 上设置默认值,那么你可以这样做

    a.create_method("dyn_meth2") { |var=2| puts "var is #{var}" }
    a.dyn_meth2
    #=> "var is 2"
    

    最后但同样重要的是,您需要可变参数

    a.create_method("dyn_meth2") { |*args| puts "var is #{args}" }
    a.dyn_meth2(1,2,3)
    #=> "var is [1,2,3]
    

    【讨论】:

    • 您在最后两个 create_method 参数中缺少右引号。有人实际上并没有运行代码并将输出粘贴到示例中。 ;-)
    【解决方案2】:

    像这样?

    a.create_method("dyn_meth2") {|var1, var2, &block| 
       puts "var1 = #{var1} . var2 #{var2}"
       block.call 
    }
    

    【讨论】:

      猜你喜欢
      • 2022-06-23
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-24
      • 2015-02-09
      相关资源
      最近更新 更多