考虑这样的代码:
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 有点偏离(最好将该项目拆分为容器和具体项目),
但由于它是一堆所有相同的东西,并且这就是它已经存储在数据库中的方式,我决定我想返回一个像这样的枚举器。
不幸的是,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)
产生以下文档: