gpt4 book ai didi

ruby - 如何在 YARD 中引用当前类作为返回类型?

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:22 25 4
gpt4 key购买 nike

考虑这样的代码:

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)

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


编辑 2:我正在通过 --embed-mixin选择码。 incluser Class文档中的当前结果是这样的:(抱歉模块名称不同) The details part of <code>Bar</code>

最佳答案

不幸的是,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

生成以下文档:

foo documentation bar documentation

关于ruby - 如何在 YARD 中引用当前类作为返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56287625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com