类 (Classes)

  • 避免使用类变量(@@),
    因为在继承的时候它们会有 “淘气” 的行为。
    [link]

    1. class Parent
    2. @@class_var = 'parent'
    3. def self.print_class_var
    4. puts @@class_var
    5. end
    6. end
    7. class Child < Parent
    8. @@class_var = 'child'
    9. end
    10. Parent.print_class_var # => 会输出"child"

    你可以看到在这个类的继承层级了,所有的类都共享一个类变量。 尽量使用实例变量而不是类变量。

  • def self.method 来定义单例方法(singleton
    methods). 这样在需要改类名的时候更方便.
    [link]

    1. class TestClass
    2. # 错误
    3. def TestClass.some_method
    4. ...
    5. end
    6. # 正确
    7. def self.some_other_method
    8. ...
    9. end
  • 除非必要,避免写 class << self
    必要的情况比如 single accessors 和 aliased attributes。
    [link]

    1. class TestClass
    2. # 错误
    3. class << self
    4. def first_method
    5. ...
    6. end
    7. def second_method_etc
    8. ...
    9. end
    10. end
    11. # 正确
    12. class << self
    13. attr_accessor :per_page
    14. alias_method :nwo, :find_by_name_with_owner
    15. end
    16. def self.first_method
    17. ...
    18. end
    19. def self.second_method_etc
    20. ...
    21. end
    22. end
  • public, protected, private 它们和方法定义保持相同缩进。 并且上下各留一个空行。[link]

    1. class SomeClass
    2. def public_method
    3. # ...
    4. end
    5. private
    6. def private_method
    7. # ...
    8. end
    9. end