2009-05-19 24 views
9

John Nunemaker最近在博客Ruby中various ways to define class methods,使這三種備選方案:你更喜歡在Ruby中定義類方法嗎?

# Way 1 
class Foo 
    def self.bar 
    puts 'class method' 
    end 
end 

# Way 2 
class Foo 
    class << self 
    def bar 
     puts 'class method' 
    end 
    end 
end 

# Way 3 
class Foo; end 
def Foo.bar 
    puts 'class method' 
end 
  • 什麼是做到這一點的首選方法是什麼?
  • 你更喜歡上述以外的東西嗎?
  • 如果您使用多種方式,您在什麼情況下使用它們?

回答

12

我一直使用方法1:

class Foo 
    def self.bar 
    puts 'class method' 
    end 
end 

這並不冗長,它不斷在課堂上的相同背景下的方法。

1

我更喜歡Way 1,因爲它不是上下文敏感的。我不喜歡跳到文件中間,然後不得不向上或向下滾動以查看縮進是否意味着我在class << self塊中,或者它只是一個嵌套模塊。

0

我認爲< <添加一個方法太不尋常(雖然我很高興地使用< <與字符串和IO)。

我避免Foo.bar,因爲它意味着重複自己。

1

同意大部分的用戶。我傾向於主要使用

# Way 1 
class Foo 
    def self.bar 
    puts 'class method' 
    end 
end 

有一些小的差異,如果我沒有記錯,這顯示在注重實效的編程元編程會談(我建議),其中涉及到的類代碼是如何調用和執行。

它們雖然很小,但大多數情況下我們不需要在正常的基礎上處理。將看看我是否可以檢查出來併發布。

0

我使用Way#3,但我認爲Way#1也很棒。這取決於你的使用情況。如果你想讓你的代碼在其他模塊和類中「切割/粘貼」,那麼Way#1更好。我使用Way#3來切割/粘貼代碼更加痛苦,b/c Ruby的口頭禪是「不要重複自己」,所以你不應該經常剪切/粘貼代碼。

3

我一般對於單一方法更喜歡def self.foo,對於長時間的類方法更喜歡class << self。我感覺它使得類方法部分和類定義的實例方法部分之間存在區別。

相關問題