这是我的应用程序助手:
def call_me
"blah"
end
P = Proc.new { call_me }
def test_me
P.call
end
如果我在我的观点中这样做:
<%= test_me %>
我收到错误消息,说call_me是未定义的方法。
如何让Proc能够调用call_me?要求不这样做。使用ApplicationHelper :: call_me进行前缀也不会。 :(
这很有效,但是我真的不喜欢它,因为test_me会被调用很多次,实际上还有很多过程:
def test_me
p = Proc.new { call_me }
p.call
end
答案 0 :(得分:2)
它应该在Ruby 1.9.2中工作,但在早期版本中,您可以将助手作为参数传递给Proc:
P = Proc.new { |helper| helper.call_me }
def test_me
P.call self
end
由于call_me
是助手上的实例方法,因此需要使用实例调用它。
答案 1 :(得分:0)
我认为你在寻找这个?
def call_me
Proc.new
end
proc = call_me { "blah" }
proc.call #=> "blah"
答案 2 :(得分:0)
你必须传递call_me。得到一种错综复杂的......
p = Proc.new { |m| m.call }
def test_me
p.call(call_me)
end
我不完全确定你的目标在更大的意义上是什么,所以这或多或少是在黑暗中刺伤......
答案 3 :(得分:0)
最实用的方法是将模块方法设为静态,然后在任何需要的地方简单地使用它们:
module Sample::SillyModule
def self.say_hello(my_cool_var)
puts "Hello #{my_cool_var}!"
end
end
proc do
Sample::SillyModule.say_hello("stackoverflow")
end