2

给定以下两种在 Ruby 中定义类方法的方法:

class Foo
  class << self
    def bar
      # ...
    end
  end

  def self.baz
    # ...
  end
end

两者有区别吗?一个比另一个更可取吗?

4

4 回答 4

3
于 2009-07-07T23:01:09.170 回答
3

简而言之:没有和没有。

这取决于个人喜好。如果您定义了许多类方法,第一个版本可以节省您的输入。如果您不喜欢第一个的晦涩语法,则第二个可能更可取。

于 2009-07-07T20:31:56.757 回答
0

正如 molf 所说,没有有效的区别。但是 IMO,第二个更容易略读——很容易错过class<<self并认为您仍在查看实例方法。我只在需要更多动态行为时才倾向于使用class<<self路由,例如创建attr_accessor类本身的属性。

于 2009-07-07T21:17:05.013 回答
0

选项 1. 如果您class << self在对应的end. 如果您没有注意到在class << self块内定义了一个方法,您可能会认为它只是一个实例方法。

选项 2. 对未受过训练的 Ruby 眼来说更打字、更具表现力和更容易理解。

正如其他人已经指出的那样,最终结果没有区别。

于 2009-07-07T21:27:21.420 回答