【问题标题】:Ruby Metaprograming and passing ParametersRuby 元编程和传递参数
【发布时间】:2014-07-24 20:11:02
【问题描述】:

我想在 ruby​​ 中使用

定义一个方法
    define_method 

在另一个函数中。示例代码如下。

def demo(method_name)
    variable = 5
    define_method "#{method_name}" do
        #stuff
    end
end

在新定义的方法中我希望能够访问变量:

variable=5

之前定义的。例如我希望能够做到:

    define_method "#{method_name}" do
        return variable*variable
    end

并得到变量平方。

我希望能够:

demo("squared")
x = squared # => 25 

有没有一种方法可以将变量“变量”传递给 define_method,即使它不在同一个范围内?

【问题讨论】:

  • 你快完成了.. 什么是阻止你?
  • 好吧,我不确定,但块 do #stuff endvariable = 5 在同一范围内。即使我错了,该块也可以访问母亲的范围*。检查这个:a = 42; l =-> do; b = 22; l2 = -> do; puts a; end; end; l.call.call; *我不确定正确的标题,所以我编了。
  • 我很困惑。您显示的代码正是您想要的。那么,您的问题是什么?

标签: ruby parameter-passing metaprogramming


【解决方案1】:

当然,你所拥有的工作。有什么问题?

[15] pry(main)> def demo(method_name)    
[15] pry(main)*   variable = 5      
[15] pry(main)*   define_method "#{method_name}" do      
[15] pry(main)*     variable * variable        
[15] pry(main)*   end        
[15] pry(main)* end      
=> :demo
[16] pry(main)> demo('squared')
=> :squared
[17] pry(main)> squared
=> 25

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 2019-05-12
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多