Есть много вещей не так с этим кодом.Оставьте в стороне проблему с переменной $
, поскольку она обсуждается в комментариях к вашему OP.
Для начала вы выполните:
moron = Flat_earth_believers.new
Но у вас нет названных классовFlat_earth_believers
.Вы, вероятно, имели в виду FlatEarthBelievers
.
Вы include
модуль Common
, который создает все методы в экземплярах методов, но затем вы пытаетесь вызвать их как методы класса, здесь:
class FlatEarthBelievers < Universe
include Common
earth_is = { :attribute => "Flat!" }
init(earth_is) # this is calling a class method
end
и здесь:
class RoundEarthBelievers < Universe
include Common
earth_is = { :attribute => "Round like an Orange!" }
Common.init(earth_is) # this is calling a class method
end
Есть и другие вещи, но вы поняли идею.
Во всяком случае, я действительно не знаю, что вы пытаетесь сделать, но я думаю, что я просто сделал бы Universe
как:
class Universe
KNOWLEDGE = "Universe comprises of galaxies, stars, planets, steroids, meteoroids, comets, etc"
def universe_comprises_of
puts KNOWLEDGE
end
end
И Common
как:
module Common
def statement
puts "Earth is #{self.class::EARTH_IS[:attribute]}"
end
end
Затем FlatEarthBelievers
как:
class FlatEarthBelievers < Universe
include Common
EARTH_IS = { :attribute => "Flat!" }
end
Тогда вы можете сделать:
moron = FlatEarthBelievers.new
moron.universe_comprises_of
=> Universe comprises of galaxies, stars, planets, steroids, meteoroids, comets, etc
moron.statement
=> Earth is Flat!
Я также отмечу, что Jörg W Mittag хочет сказать:
Я один из тех Ruby Purists, которому нравится указывать на то, что в Ruby не существует такого понятия, как метод класса.Тем не менее, я совершенно в порядке, используя термин метод класса в разговорной речи, , пока все стороны полностью понимают, что это разговорный термин .Другими словами, если вы знаете , что не существует такой вещи, как метод класса, и что термин «метод класса» просто сокращен от «метод экземпляра синглтон-класса объекта, который является экземпляромClass
", тогда проблем нет.Но в остальном я только видел, как это мешает пониманию.
Пусть все стороны полностью поймут, что термин метод класса используется выше в его разговорном смысле.