类 (Classes)
避免使用类变量(
@@
),
因为在继承的时候它们会有 “淘气” 的行为。
[link]class Parent
@@class_var = 'parent'
def self.print_class_var
puts @@class_var
end
end
class Child < Parent
@@class_var = 'child'
end
Parent.print_class_var # => 会输出"child"
你可以看到在这个类的继承层级了,所有的类都共享一个类变量。 尽量使用实例变量而不是类变量。
用
def self.method
来定义单例方法(singleton
methods). 这样在需要改类名的时候更方便.
[link]class TestClass
# 错误
def TestClass.some_method
...
end
# 正确
def self.some_other_method
...
end
除非必要,避免写
class << self
,
必要的情况比如 single accessors 和 aliased attributes。
[link]class TestClass
# 错误
class << self
def first_method
...
end
def second_method_etc
...
end
end
# 正确
class << self
attr_accessor :per_page
alias_method :nwo, :find_by_name_with_owner
end
def self.first_method
...
end
def self.second_method_etc
...
end
end
public
,protected
,private
它们和方法定义保持相同缩进。 并且上下各留一个空行。[link]class SomeClass
def public_method
# ...
end
private
def private_method
# ...
end
end