繁体   English   中英

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

[英]How do I make module methods available to a constant Proc variable? (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 会被调用很多次,实际上还有更多的 Procs:

def test_me
  p = Proc.new { call_me }
  p.call
end

它应该在 Ruby 1.9.2 中正常工作,但在早期版本中,您可以将帮助程序作为参数传递给 Proc:

P = Proc.new { |helper| helper.call_me }

def test_me
    P.call self
end

由于call_me是您的助手上的实例方法,因此您需要使用实例调用它。

最实用的方法是制作模块方法 static,然后在任何需要的地方简单地使用它们:

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

我想你在找这个?

def call_me
    Proc.new
end

proc = call_me { "blah" }
proc.call   #=> "blah"

你必须把 call_me 传进去。有点复杂......

p = Proc.new { |m| m.call }

def test_me
  p.call(call_me)
end

我不完全确定你在这里的目标在更大的意义上是什么所以这或多或少是在黑暗中刺伤......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM