В Ruby, что означает строка "class ClassName <Base" в этом контексте - PullRequest
4 голосов
/ 09 августа 2011

Учитывая код

require 'gdata'

class Contacts
  class Gmail < Base

Что это значит, когда мы говорим "

Или это означает что-то еще?

Ответы [ 2 ]

1 голос
/ 09 августа 2011

База не имеет особого значения.

ruby-1.9.2-p180 :001 > Base.inspect
NameError: uninitialized constant Object::Base

Если в gdata не определен класс Base или Contacts :: Base, в этом примере должна появиться ошибка.

class Base
  def self.hello
    "oh hi!"
  end
end

class Base2
  def self.hello
    "ahoy!"
  end
end

class Contacts
  class Base
    def self.hello
      "hi 2 u"
    end
  end
  class Gmail < Base
  end
  class Gmail2 < Base2
  end
end

ruby-1.9.2-p180 :024 > Base.hello
 => "oh hi!" 
ruby-1.9.2-p180 :025 > Contacts::Gmail.hello
 => "hi 2 u" 
ruby-1.9.2-p180 :026 > Contacts::Gmail2.hello
 => "ahoy!" 
0 голосов
/ 09 августа 2011

Класс Gmail - это обычное определение вложенного класса, которое является подклассом Base. Очевидно, Base определено где-то в файле gdata, но нигде не говорится, что gdata является модулем Ruby , и, если бы это был модуль, вы не показали, что он был смешан (с include) Contacts, поэтому я не уверен, что есть какие-либо конфликты , о которых стоит беспокоиться.

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