2011-03-15 68 views
1

在我的應用程序,我有一些代碼,看起來像這樣:紅寶石方法,需要一個塊,並調用該塊

if is_translation? 
    @booking.enable_dirty_associations do           
    booking_update 
    end 
else 
    booking_update 
end 

我想它,而不是看起來像這樣:

is_translation? ? @booking.enable_dirty_associations : func do 
    booking_update 
end 

其中func是採取該塊並剛剛執行它的方法。

有沒有一個內置的Ruby方法,或者可能是一個combinator函數來做到這一點?

+1

是被傳入的塊嗎?你以某種方式創造它?根據你提供的東西你不需要一個塊,你可以這樣做:「is_translation??booking.enable_dirty_associations:booking_update」並且「booking_update」是你正在工作的實例的方法。需要更多的信息真的有幫助。 – Brandon 2011-03-15 09:29:22

+0

booking_update是我正在處理的實例的一種方法。 enable_dirty_associations我認爲只需要一個塊,我想在該塊中執行的操作是調用booking_update。 – paulodeon 2011-03-15 10:02:48

+0

作爲一個例子,原型js庫提供Prototype.K http://api.prototypejs.org/Prototype/K/函數,它返回它的參數不變。我想我正在尋找的東西是沿着這些線。 – paulodeon 2011-03-15 13:15:42

回答

1

這將是很容易寫FUNC()自己:

def func 
    yield 
end 

然而不幸的是,你的想法是行不通的,塊將只適用於func,而不是第一個電話。我能想到的去接近你想要的東西的唯一方法是定義塊作爲proc和手動傳遞:

block = Proc.new { booking_update } 

is_translation? ? @booking.enable_dirty_associations(&block) : block.call 

,這是否有不需要的func()方法的優勢。

+0

我認爲語法可能稍微偏離那裏。我希望我可以做一些像'(is_translation?[email protected]_dirty_associations:func)做booking_update結束' 我知道Proc.new方法,但正在尋找更優雅的東西 – paulodeon 2011-03-15 10:04:28