如何在 YARD 中将当前 class 引用为 return 类型?
How can I reference the current class as a return type in 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
有了这个,Bar.new.returns_new_self
将 return 另一个 Bar
,Zap.new.returns_new_self
也是如此。
我想要 retuns_new_self
YARD 记录为 return 类型。
如果我能像 Rust 中的 Self
一样做类似 @return [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)
我知道这有点偏离 OOP(最好将该项目拆分为容器和具体项目),
但由于它是一堆相同的东西,而且它已经是存储在数据库中的方式,所以我决定 return 像这样的枚举器。
编辑 2:
我正在将 --embed-mixin
选项传递给院子。 includer Class 文档中的当前结果是这样的:(抱歉模块名称不同)
遗憾的是,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
生成以下文档:
yardoc 不会按照您描述的方式生成文档。
当您生成文档时,Bar
和 Zap
将有一个部分显示:
Methods included from Foo
#returns_new_self
#returns_new_self
将 link 添加到 Foo
的文档中,而 Foo
的文档将说明该方法可能的 return 类型。个人 类 将没有该方法的文档。
您仍然可以在 Foo
中记录 returns_new_self
。将 return 类型设置为以下任何一种都将被视为有效:
来自 类 的 hard-coded 值列表,其中包括模块:
# @return [Bar,Zap]
包含模块的 类 的超类:
# @return [Object]
未定义的 return 类型的 literal void
:
# @return [void]
考虑这样的代码:
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
将 return 另一个 Bar
,Zap.new.returns_new_self
也是如此。
我想要 retuns_new_self
YARD 记录为 return 类型。
如果我能像 Rust 中的 Self
一样做类似 @return [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)
我知道这有点偏离 OOP(最好将该项目拆分为容器和具体项目),
但由于它是一堆相同的东西,而且它已经是存储在数据库中的方式,所以我决定 return 像这样的枚举器。
编辑 2:
我正在将 --embed-mixin
选项传递给院子。 includer Class 文档中的当前结果是这样的:(抱歉模块名称不同)
遗憾的是,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
生成以下文档:
yardoc 不会按照您描述的方式生成文档。
当您生成文档时,Bar
和 Zap
将有一个部分显示:
Methods included from
Foo
#returns_new_self
#returns_new_self
将 link 添加到 Foo
的文档中,而 Foo
的文档将说明该方法可能的 return 类型。个人 类 将没有该方法的文档。
您仍然可以在 Foo
中记录 returns_new_self
。将 return 类型设置为以下任何一种都将被视为有效:
来自 类 的 hard-coded 值列表,其中包括模块:
# @return [Bar,Zap]
包含模块的 类 的超类:
# @return [Object]
未定义的 return 类型的 literal void
:
# @return [void]