如何文档化子类覆盖而不冗余的方法?例如..。
class Parent
# Is this the parent?
# @return [Boolean]
def parent?
true
end
end
class Child < Parent
def parent?
false
end
end院子会产生这样的东西。
班级:家长 实例方法摘要 #父?⇒布尔值 这是家长吗?班级:儿童 实例方法摘要 #父?⇒布尔值
生成的院子文档将不包括“这是父的吗?”在Child#parent的文档中?,也不会指示它是一个覆盖。
我想看到这样的情况:
班级:家长 实例方法摘要 #父?⇒布尔值 这是家长吗?班级:儿童 实例方法摘要 #父?⇒布尔值 这是家长吗? 从父级继承的方法 #家长?
我不希望将文档复制到每个子类中。
发布于 2022-12-01 03:04:09
简单答案
记录这一点的正确方法是在返回类型之后放置一个自由形式的描述,并可能记录方法本身。例如:
class Parent
# True when a passed argument has Parent
# as an ancestor.
#
# @return [Boolean] ancestor of subclass
def parent?
true
end
end一个更全面的例子
您还可以通过利用标记语法的自由形式部分和标记语言(默认情况下为RDoc)提供使用示例和更详细的文档。
class Parent
# True when passed argument includes
# +Parent+ as an ancestor.
#
# @example Cousin isn't subclass of Parent
# parent? Cousin.new #=> false
# @example Child is a subclass of Parent
# parent? Child.new #=> true
# @param obj [Class, #ancestors] Class,
# instance, or other object that can
# #respond_to?(:ancestors)
# @return [Boolean] ancestors of _obj_
# includes +Parent+ class
def parent? obj
obj.class.ancestors.include? self.class
end
end可能有更优雅的方法来实现这一点,而且我正在电话上输入,所以请注意代码的清空器,因为我还没有实际测试代码,也没有验证码输出的格式。不过,一般的方法是合理的,我经常使用这种格式。
核心思想
基本上,核心的想法是人们应该:
在大多数情况下,更简单更好。当然,理解YARD不能简洁地表示您的创作意图是一种艺术形式,但是很难按预期标记或呈现的代码可能表明需要重构代码,而不仅仅是修改码标记。
记住院子的主要目的
请记住,院子主要用于文档的**元素,并向呈现引擎或文档阅读器提供提示,它本身不是一种成熟的标记语言,不能用陡峭的RBS验证签名,也不强制执行任何类型的调用者/被叫者契约。
都是些评论。使您的代码尽可能自我解释,然后将码看作是通过标记文档元素来改进必要注释的一种方法,这样标记语言就可以生成更好的输出。
发布于 2022-12-01 21:26:55
您可以在每个方法上使用一个参考标签来引用父方法。
class Child < Parent
# (see Parent#parent?)
def parent?
false
end
endChild#parent?将拥有与Parent::parent?相同的文档
https://stackoverflow.com/questions/74634832
复制相似问题