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

时间:2018-07-13 13:45:07

标签: ruby-on-rails 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'

为了提供更多背景信息,我尝试使用association extensions,它允许您为关联提供一个方法块,以在该关联上定义其他辅助方法。我有一些方法要在具有相似关联的几种类似活动记录模型上使用,但是在进行调用时它们之间只有一个符号不同(在{{1上传递给through的联接表的名称}}关系)。因此,理想情况下,我正在考虑创建一种接受该符号的方法,然后将其用于关联扩展的实现中。

2 个答案:

答案 0 :(得分:2)

您的示例有两个问题:

  1. 您不能像这样调用“充满方法的过程”,它将作为关联扩展,但是在那里,该块被评估为模块主体,而不是UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:60 * 60 * 24 repeats:NO]; ed。

  2. 关键字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?