Ruby koan 248:我错过了什么?

时间:2015-01-13 10:44:33

标签: ruby

我刚刚完成了Ruby koan 248并且在about_class_methods,rb文件的末尾有这段代码:

class Dog
    def self.class_method2
      :another_way_to_write_class_methods
    end
  end

  def test_you_can_use_self_instead_of_an_explicit_reference_to_dog
    assert_equal :another_way_to_write_class_methods, Dog.class_method2
  end

  # ------------------------------------------------------------------

  class Dog
    class << self
      def another_class_method
        :still_another_way
      end
    end
  end

  def test_heres_still_another_way_to_write_class_methods
    assert_equal :still_another_way, Dog.another_class_method
  end

  # THINK ABOUT IT:
  #
  # The two major ways to write class methods are:
  #   class Demo
  #     def self.method
  #     end
  #
  #     class << self
  #       def class_methods
  #       end
  #     end
  #   end
  #
  # Which do you prefer and why?
  # Are there times you might prefer one over the other?

我不确定我是否理解为什么在不同的情况下,我可能更喜欢一种语法而不是另一种语法。我可以看到你可以在类中定义一组方法&lt;&lt;自我部分,但这是重点吗?我认为我有一些微妙的缺失,但我不知道那是什么。

有人会介意把它拼写给我吗?

1 个答案:

答案 0 :(得分:0)

您可能希望在 class << self 上使用 def self.method,因为您可能希望向类添加属性 reader 属性。事实上,任何时候您想使用为类定义的语法时,您都可能需要考虑 class << self。我是 Ruby 的新手,但我想如果您想定义许多类方法,您可以使用 class << self 语法将它们组合在一起。