2012-09-18 112 views
2

當你需要在一個對象上執行多種方法時,你更喜歡哪種解決方案?如何在同一個對象上執行多個方法?

代碼應該爲自己說話:

class Foo 
    def self.build 
    foo = new 
    foo.first 
    foo.second 
    foo 
    end 

    def first 
    end 

    def second 
    end 
end 

class Bar 
    def self.build 
    new.first.second 
    end 

    def first 
    self 
    end 

    def second 
    self 
    end 
end 
+1

另外,如果簡潔是你要做的事,看看'.tap()' ... –

+0

其實,#tap不會那麼難,我知道它,我幾乎沒有使用它... –

回答

1

我認爲這取決於你希望有多少次是調用這些方法。他們會被頻繁地召集到一起還是隻在這裏召集一次?如果這只是一次採用2線方法,因爲它不是在回報中不必要地傳遞self。如果它經常發生,那麼制定另一種連續調用它們的方法。

0

這是一個折衷。答案取決於(1)重要性和(2)周圍代碼的複雜性。你是一個程序員必須做出決定的人。管道形式更短,節省垂直空間。稀疏形式更易於調試。根據您選擇方法關鍵字的方式,內聯表單可能會像人類句子一樣讀取,但在其他情況下,稀疏表單可能更易於人類閱讀。如果你的方法處於繁重的發展階段,請使用稀疏的書寫方式。對於穩定的代碼,管道形式是O.K.對於不太重要的代碼,例如測試,我喜歡使用管道形式。事實上,我喜歡這麼多,我甚至忽略了點,所以我FizzBuzz程序是這樣的,用我的自定義庫,允許密集帶點一個字符的方法雙barell管道:

(1..100).τᴍ⁒i⁇χ(3, 0, "fizz", nil).πᴍ⁒i⁇χ(5, 0, "buzz", nil).πγZᴍjτ 

所以請記住,一個線條管道是沒有什麼,像上面的程序是他們在Ruby中說的「非常糟糕的風格」時的含義:))

相關問題