如何引用当前类作为 YARD 中的返回类型?

Tod*_*oki 6 ruby yard

考虑这样的代码:

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
Run Code Online (Sandbox Code Playgroud)

这样,Bar.new.returns_new_self将返回另一个Bar,同样的情况也是如此Zap.new.returns_new_self

我想要用retuns_new_self返回类型记录 YARD。
如果我能做一些像Rust@return [Self]那样的事情那就太好了Self

我可以做类似的事情吗?


编辑:(回复@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)
Run Code Online (Sandbox Code Playgroud)

我知道这与 OOP 有点偏离(最好将该项目拆分为容器和具体项目),
但由于它是一堆所有相同的东西,并且这就是它已经存储在数据库中的方式,我决定我想返回一个像这样的枚举器。


编辑2:我正在将--embed-mixin选项传递给院子。包含器类文档中的当前结果是这样的:(抱歉模块名称不同) <code>Bar</code> 的详细信息部分

Ric*_*nne 1

不幸的是,YARD 无法做到这一点。最好的选择是在文档中明确说明Foo#returns_new_self。就我个人而言,我完全可以接受类似的事情

module Foo
  ##
  # Returns a new instance of the object's class.
  #
  # @return [Object]
  def returns_new_self
    self.class.new
  end
end

class Bar
  include Foo
end

class Zap
  include Foo
end
Run Code Online (Sandbox Code Playgroud)

产生以下文档:

foo 文档 酒吧文档