2015-08-21 81 views
0

我基本上是試圖做到這一點存儲過程的模塊屬性?

module Foo 
    @@do_something = Proc.new { puts "something" } 
end 

Foo::do_something.() 

的屬性必須特效/ lambda表達式,使他們能夠作爲參數傳遞給另一個PROC /λ/方法進行傳遞:

def other_method(do_something) 
    do_something.() 
end 

other_method(Foo::do_something) 

目前這正在工作:

module Foo 
    DO_SOMETHING = Proc.new { puts "something" } 
end 

Foo::DO_SOMETHING.() 

但我猜這不會通過代碼審查。這是唯一的方法嗎?

回答

0

你可以簡單地爲類變量創建訪問:

module Foo 
    def self.do_something 
    @@do_something 
    end 
    @@do_something = Proc.new { puts "something" } 
end 

Foo::do_something.() 
something 

或任何操作:

Foo::do_something[] 
Foo::do_something.call 
Foo::do_something.yield 
+0

我有好幾個,這些特效的,所以我關心的是性能的數和訪問器方法。我想我可以直接從self.do_something返回proc而不是將其存儲在@@ do_something中並返回它? – Kylee

+1

您可能會考慮將它們存儲在散列中,以模塊函數的形式返回,該函數將鍵作爲參數。我只是因爲你這樣做才使用了類變量,因爲我這樣咬牙切齒。 –

+0

該解決方案更有意義且更具可擴展性。 – Kylee