Ruby on rails Ruby define方法返回使用参数的proc
在Ruby中,我想定义一个接受参数的方法,该方法返回一个包含使用该参数的方法的过程。类似于下面的内容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”未定义 为了提供更多的上下文,我尝试使用,它允许您向关联提供一个方法块,以定义关联上的额外帮助器方法。我有一些方法希望在几个具有
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