Ruby元编程和参数传递

Ruby元编程和参数传递,ruby,parameter-passing,metaprogramming,Ruby,Parameter Passing,Metaprogramming,我想在ruby中使用 define_method 在另一个函数中。下面是示例代码 def demo(method_name) variable = 5 define_method "#{method_name}" do #stuff end end 在新定义的方法中,我希望能够访问变量: variable=5 这是以前定义的。例如,我希望能够做到: define_method "#{method_name}" do

我想在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 

是否有一种方法可以将变量“variable”传递到define_方法中,即使它不在同一范围内?

当然可以,而且您所拥有的方法也有效。有什么问题吗

[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

当然可以,你所拥有的一切都有用。有什么问题吗

[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

你差不多完了。。是什么阻止了你?我不确定,但是block
do#stuff end
variable=5
在同一范围内。即使我错了,那个块也可以进入母亲的视野*。检查此项:
a=42;l=->do;b=22;l2=->do;提出了一个解决方案;结束;结束;l、 call.call*我不确定正确的标题,所以我编造了这个。我很困惑。您显示的代码完全符合您的要求。那么,你的问题是什么?你差不多完成了。。是什么阻止了你?我不确定,但是block
do#stuff end
variable=5
在同一范围内。即使我错了,那个块也可以进入母亲的视野*。检查此项:
a=42;l=->do;b=22;l2=->do;提出了一个解决方案;结束;结束;l、 call.call*我不确定正确的标题,所以我编造了这个。我很困惑。您显示的代码完全符合您的要求。那么,你的问题是什么?