У меня есть класс, чей метод new
был закрыт, потому что я хочу, чтобы только мои "конструкторы" метода класса создавали новые экземпляры. Однако теперь мне нужно, чтобы некоторые методы экземпляров тоже создавали новые экземпляры.
Например, посмотрите на следующий фрагмент. Это в method_a
, где у меня проблемы:
Class Foo
class << self
#a "constructor" method
def from_x arg
stuff_from_arg = arg.something #something meaningful from arg
new(stuff_from_arg)
end
end
def initialize stuff
@stuff = stuff
end
private_class_method :new #forces use of Foo.from_x
def method_a
other_stuff = "blah"
#These do not work
return new(blah) #nope, instance cannot see class method
return self.class.new(blah) #nope, new is private_class_method
return Foo.new(blah) #same as previous line
return initialize(blah) #See *, but still doesn't work as expected
end
end
Я начинаю думать, что я, возможно, спроектировал этот класс таким образом, что мне нужно создать другой метод конструктора класса для создания нового Foo
, например:
#in addition to previous code
Class Foo
class << self
def just_like_new stuff
new(stuff)
end
end
end
Это не очень правильно и не очень СУХО, но, возможно, это кровать, которую я для себя сделал. Я могу что-нибудь сделать?
* Эта строка была немного удивительной. Возвращает blah
. Помимо определения класса, есть также initialize
, который принимает 0 аргументов и возвращает nil
Кто-нибудь знает, что здесь происходит?