Как получить доступ к имени строки родительского класса из метода класса в расширенном классе или включенном модуле - PullRequest
2 голосов
/ 18 июля 2010

Моя проблема в основном выглядит так:

module Foo
  class Bar
    def self.who
      self.class.to_s
    end
  end
end

class World < Foo::Bar

end

Когда я звоню World.who, я не получаю "World", в результате я получаю "Class". Некоторый быстрый поиск в Google не принес ничего полезного, поэтому я надеюсь, что кто-нибудь узнает, как получить правильное имя класса:)

Ответы [ 2 ]

4 голосов
/ 18 июля 2010

Если вы вызываете foo.bar, то внутри метода bar значение self будет foo.Поэтому, когда вы звоните World.who, значение self внутри who равно World.Поскольку World является классом, World.class вернет Class, вот что вы получите.

Чтобы вернуться "World", просто позвоните self.to_s или self.name (или просто to_sили name).

2 голосов
/ 18 июля 2010

Вы получаете это, потому что World - это Class.В рубине AClass.class != AClass.Итак, вы можете использовать это:

module Foo
  class Bar
    def self.who
      to_s
    end
  end
end

class World < Foo::Bar

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...