Что бы вы написали внутри?Что вы хотите, чтобы он делал?
У вас есть метод класса с именем empty
, который возвращает что-то, имеющее метод empty
, который либо (a) не принимал параметров, либо (b) имел их по умолчанию.
class MyClass
def self.empty
return WithEmpty.new # Or existing WithEmpty
end
end
Также необходимо вернуть то, что имеет метод add
и возвращает само себя.
class WithEmpty
def initialize
@a_list = []
end
def add x
@a_list << x
self
end
def empty
@a_list.empty?
end
end
Было бы проще / быстрее, если бы вы описали, что вы 'пытаюсь сделать.Это не сразу очевидно.
pry(main)> MyClass::empty()
=> #<WithEmpty:0xa01a090 @a_list=[]>
pry(main)> MyClass::empty().empty
=> true
pry(main)> MyClass::empty.empty
=> true
pry(main)> MyClass::empty.add("hi").add("bye")
=> #<WithEmpty:0x9fc8d1c @a_list=["hi", "bye"]>
Теперь у вас нет непосредственного способа попасть в список «внутреннего» класса, если вы не сохранили его в MyClass
(схематично, поскольку методы являются классом, а не экземпляром)., method), или вы сохраняете возвращаемое значение из последней связки связанных методов.
Но если вы сохраняете экземпляр, какой смысл делать это через MyClass
?Опять же, я не могу помочь, но думаю, что вам нужно определить, что вы на самом деле пытаетесь достичь, вместо того, чтобы сосредоточиться на том, как вы можете это сделать.Какова цель?
Во-первых, для массива нет метода add.То, что вы описываете, пока не имеет смысла, если вы не имеете в виду что-то вроде этого:
class MyClass
def self.empty
return MyClass.new
end
def initialize
@arr = []
end
def empty
@arr.empty?
end
def add x
@arr << x
self
end
end
Тогда:
pry(main)> MyClass.empty
=> #<MyClass:0x9aea390 @arr=[]>
pry(main)> MyClass.empty.add("ohai").add("kthxbai")
=> #<MyClass:0x99f505c @arr=["ohai", "kthxbai"]>
Но опять же: вы смешиваете класс и экземплярметоды, которые я не нахожу чувственными.Как вы хотите получить доступ к массиву?Какой смысл MyClass
?Почему бы просто не использовать массив?
pry(main)> a = []
=> []
pry(main)> a.empty?
=> true
pry(main)> a << "ohai" << "kthxbai"
=> ["ohai", "kthxbai"]
pry(main)>
pry(main)> a.empty?
=> false
Без каких-либо указаний относительно цели MyClass
, сказать вам разумный способ ее реализации сложно, потому что без контекста то, что вы показали, нене имеет большого смысла.