Рассмотрим код, подобный этому:
module Foo
# returns a copy of self
# @return [ ___ ]
def returns_new_self
self.class.new
end
end
class Bar
include Foo
end
class Zap
include Foo
end
При этом Bar.new.returns_new_self
вернет еще один Bar
, и то же самое будет с Zap.new.returns_new_self
.
Я хочу получить документацию retuns_new_self
YARD с типом возврата.
Было бы хорошо, если бы я мог сделать что-то вроде @return [Self]
как Self
в Rust.
Могу ли я сделать что-то подобное?
РЕДАКТИРОВАТЬ: (в ответ на @spickermann)
Фактический код выглядит так:
module MultipleItemBehaviour
# @return [Integer]
def count; not_implemented end
# @return [Enumerator]
def each_count
return enum_for(:each_count) unless block_given?
count.times do
yield single_item
end
end
# @return [ __SELF__ ]
def single_item; not_implemented end
private def not_implemented
raise NotImplementedError, "message"
end
end
class SomeItemWhichIsABunch
include MultipleItemBehaviour
attr_reader :count
def initialize(count)
@count = count
end
def single_item
self.class.new(1)
end
end
SomeItemWhichIsABunch.each_count.take(5).map(&:something)
Я понимаю, что это немного отличается от ООП (лучше разделить этот Предмет на Контейнер и конкретные Предметы),
но поскольку это куча одних и тех же вещей и то, как они уже хранятся в БД, я решил, что хочу вернуть перечислитель, подобный этому.
РЕДАКТИРОВАТЬ 2:
Я передаю опцию --embed-mixin
во двор. Текущий результат в документе класса включения выглядит так: (извините за другое имя модуля)
Bar">