2011-09-21 124 views
0

我在項目中使用了一些幫助程序,我只是認爲我可以把它當作Procs,因爲它們執行非常特定的任務,並且可以由非常不同的組件使用。如何在Ruby on Rails中使用Procs?

我已經在小型Ruby項目中使用了Procs,主要是在學習語言時,我認爲這將是一個很好的機會來使用它們。

我的問題是,我會在哪裏把Proc的Rails文件夾結構?有沒有這方面的指導或reccomdendations?它被認爲是良好的做法?

回答

3

我對使用Procs比使用簡單方法的好處是什麼有點困惑?所以如果你能舉一些例子,那會很好。

反正:因爲Procs可以存儲在一個變量中,我將在lib文件夾中聲明一個模塊,並將procs定義爲變量,常量或返回proc的方法。這樣

module ProcContainer 

    def proc_1(factor) 
    Proc.new { |n| n*factor } 
    end 

    PROC_2 = Proc.new { |n| 2 * n } 

end 

一些東西,將用作

gen_proc = ProcContainer.proc_1(6) 
result = gen_proc(3) 

other_proc = ProcContainer.PROC_2(4) 

該方法的優點是顯而易見的我猜的,因爲它會在每次調用時返回一個新的Proc對象,而不變的是隻評估一次。

(當然你應該改變的命名更合適一些)

+0

謝謝你的回答,雖然我認爲rails會有一個更具體的地方Procs /代碼塊,但我想我錯了。我正在考慮的情況是我想在用於內容輸出前應用的應用程序範圍過濾器。現在我把它作爲幫手,並在視圖中使用它,但由於某種原因,感覺不對,所以我想了解更多關於Proc的... –

1

Ruby對塊有着驚人的語法,所以我們傾向於通過明確製作特效來支持它們。塊的缺點是它們需要在被調用方法屈服時立即執行(特效程序沒有這個限制)。這是出於性能原因,但您可以輕鬆地將塊封裝爲proc,並將其存儲在其他地方供以後使用,或者將其傳遞給另一種方法。所以即使你每天都在使用proc,你也沒有真正意識到它,因爲你的接口是通過塊語法。

+0

我知道塊和一切,我的意思是,我想要存儲的特效將它們傳遞給方法非常特殊的獨立的任務,但我不知道應該將哪些文件放入Rails中,以便整個應用程序都可以訪問它們。 –