给定以下两种在 Ruby 中定义类方法的方法:
class Foo
class << self
def bar
# ...
end
end
def self.baz
# ...
end
end
两者有区别吗?一个比另一个更可取吗?
给定以下两种在 Ruby 中定义类方法的方法:
class Foo
class << self
def bar
# ...
end
end
def self.baz
# ...
end
end
两者有区别吗?一个比另一个更可取吗?
简而言之:没有和没有。
这取决于个人喜好。如果您定义了许多类方法,第一个版本可以节省您的输入。如果您不喜欢第一个的晦涩语法,则第二个可能更可取。
正如 molf 所说,没有有效的区别。但是 IMO,第二个更容易略读——很容易错过class<<self
并认为您仍在查看实例方法。我只在需要更多动态行为时才倾向于使用class<<self
路由,例如创建attr_accessor
类本身的属性。
选项 1. 如果您class << self
在对应的end
. 如果您没有注意到在class << self
块内定义了一个方法,您可能会认为它只是一个实例方法。
选项 2. 对未受过训练的 Ruby 眼来说更打字、更具表现力和更容易理解。
正如其他人已经指出的那样,最终结果没有区别。