在Ruby中,我想定义一个带有参数的方法,该方法返回一个充满使用该参数的方法的proc。类似于以下内容
def test(word)
proc do
def hello
puts word
end
end
end
my_proc = test('hello')
my_proc.call.hello
运行此代码时,未定义局部变量'word'
为了提供更多背景信息,我尝试使用association extensions,它允许您为关联提供一个方法块,以在该关联上定义其他辅助方法。我有一些方法要在具有相似关联的几种类似活动记录模型上使用,但是在进行调用时它们之间只有一个符号不同(在{{1上传递给through
的联接表的名称}}关系)。因此,理想情况下,我正在考虑创建一种接受该符号的方法,然后将其用于关联扩展的实现中。
答案 0 :(得分:2)
您的示例有两个问题:
您不能像这样调用“充满方法的过程”,它将作为关联扩展,但是在那里,该块被评估为模块主体,而不是UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 * 60 * 24 repeats:NO];
ed。
关键字call
重置局部变量作用域。要将值添加到函数中,可以使用def
来定义它(该块保留周围的范围),或将值放在函数可以找到它的其他位置(例如,类变量)
define_method
另外,如果您要在多个关联上定义大致相同的方法,则通过将它们定义为类级范围可能会有一条更简单的路径。
答案 1 :(得分:0)
这就像您的通话。
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
。
您可以在此处找到更多信息:Is it possible to have Methods inside Methods?