Ruby on rails Ruby define方法返回使用参数的proc

Ruby on rails Ruby define方法返回使用参数的proc,ruby-on-rails,ruby,proc,Ruby On Rails,Ruby,Proc,在Ruby中,我想定义一个接受参数的方法,该方法返回一个包含使用该参数的方法的过程。类似于下面的内容 def test(word) proc do def hello puts word end end end my_proc = test('hello') my_proc.call.hello 运行此代码时,局部变量“word”未定义 为了提供更多的上下文,我尝试使用,它允许您向关联提供一个方法块,以定义关联上的额外帮助器方法。我有一些方法希望在几个具有

在Ruby中,我想定义一个接受参数的方法,该方法返回一个包含使用该参数的方法的过程。类似于下面的内容

def test(word)
  proc do
    def hello
      puts word
    end
  end
end

my_proc = test('hello')
my_proc.call.hello
运行此代码时,局部变量“word”未定义


为了提供更多的上下文,我尝试使用,它允许您向关联提供一个方法块,以定义关联上的额外帮助器方法。我有一些方法希望在几个具有类似关联的类似活动记录模型上使用,但它们在进行调用时仅存在一定的差异(通过
上的
传递到
的联接表的名称有很多关系)。因此,理想情况下,我正在考虑创建一个接受该符号的方法,然后可以在关联扩展的实现中使用该符号。

您的示例有两个问题:

  • 你不能像那样调用一个“满是方法的过程”——它将作为一个关联扩展,但是在那里块作为一个模块体进行计算,而不是
    call
    ed

  • def
    关键字重置局部变量范围。要将值放入函数中,您可以使用
    define_method
    来定义它(该块保留周围的作用域),或者将值放在函数能够找到它的其他位置(例如,类变量)




  • 另外,如果您在多个关联上定义了大致相同的方法,那么将它们定义为类级作用域可能会有一个更简单的路径。

    这与您的调用类似

    def test(word)
      proc do
        define_method :hello do
          puts word
        end
      end
    end
    
    my_proc = test('hello world')
    my_proc.call.hello
    
    它返回的广告
    #=>hello world

    编辑:拾取@engineersmnky注释,然后您只需调用
    hello


    您可以在这里找到更多信息:

    OP请注意,
    hello
    现在也是一种可以在“全局级别”访问的方法。例如,您可以在不使用
    程序的情况下拨打
    你好
    ,因为接收者那里的程序没有意义。@engineersmnky,谢谢!我不知道这件事。我编辑了这篇文章。这与@matthewd的回答有什么不同?
    def test(word)
      proc do
        define_method :hello do
          puts word
        end
      end
    end
    
    my_proc = test('hello world')
    my_proc.call.hello