нотация class << в модулях

Я пытаюсь смешать модуль с классом и хочу, чтобы некоторые методы вели себя как методы класса, а другие — как методы экземпляра.

Однако я не хочу, чтобы включалиирасширялимодуль. Я бы предпочел просто включитьего.

Когда я оборачиваю методы, которые я хочу сделать методами класса, в эту нотацию, это работает:

class <<
  # ...
end

Однако, когда я использую эту нотацию, это не работает:

class << self
  # ...
end

Я подозреваю selfключевое слово устанавливает явную привязку к модулю, а не к классу, с которым он смешивается. Но я не видел никакой документации, в которой рекомендовалось бы отключать ключевое слово selfпри использовании нотации class <<.

Кто-нибудь знает, что с этим происходит?


ОБНОВЛЕНИЕ: вот пример кода для большей ясности:

module M
  class <<
    def class_method
      puts "From inside the class_method"
    end
  end

  def instance_method
    puts "From inside the instance_method"
  end
end

class Object
  include M
end

class C
end


C.class_method

obj = C.new
obj.instance_method
5
задан Nathan 27 May 2012 в 17:34
поделиться