如何使模块方法可用于常量Proc变量? (红宝石)

时间:2011-06-30 18:38:33

标签: ruby-on-rails ruby

这是我的应用程序助手:

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

4 个答案:

答案 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