Ruby定义方法以返回使用参数的proc



在Ruby中,我想定义一个接受参数的方法,该方法返回一个充满使用该参数的方法的proc。类似以下

def test(word)
proc do
def hello
puts word
end
end
end
my_proc = test('hello')
my_proc.call.hello

运行此代码时,本地变量"word"未定义

为了提供更多的上下文,我尝试使用关联扩展,它允许您向关联提供一组方法,以便在关联上定义额外的辅助方法。我有一些方法想在具有类似关联的几个类似活动记录模型上使用,但它们在进行调用时只相差某个符号(在has_many关系上传递给through的联接表的名称(。因此,理想情况下,我正在考虑制作一个接受该符号的方法,然后将其用于关联扩展的实现。

您的示例有两个问题:

  1. 你不能像那样调用"充满方法的proc"——它将作为关联扩展工作,但在那里,块被评估为模块体,而不是called。

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


def test(word)
proc do
define_method(:hello) do
puts word
end
end
end
Class.new(&test("hello")).new.hello

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

这就像您的呼叫。

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

你可以在这里找到更多信息:有可能在方法中包含方法吗?

最新更新