给定以下两种在 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 眼来说更打字、更具表现力和更容易理解。
正如其他人已经指出的那样,最终结果没有区别。