• 类 (Classes)

    类 (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