我已经得到了我认为是一个相当基本的码宏用法,其中我有一个Hash结构,其中包含多个函数之间共享的多个选项。我希望使用一个宏只是为了防止我不得不在整个地方复制这个结构,但它似乎不像那样工作。
我期望的工作是:
# @macro [new] my_hash
# @param $1 [Hash,Array<Hash>] Inputted my_hash
# @option $1 [String] :a Value for A.
# @option $1 [String] :b Value for B.
# @option $1 [String] :c Value for C.
##
# my_func does stuff
# @macro my_hash h1
def my_func h1
end
##
# other_func does stuff
# @macro my_hash h2
def other_func h2, a, b
end
并正确记录了h1和h2。我想我已经发现至少1美元不能像那样工作而不是从函数本身,但我可以调用两个参数h1并用宏中的h1替换$ 1,我仍然没有得到我想要的。
http://rubydoc.info/docs/yard/file/docs/Tags.md#macro处的“定义简单宏”示例表明我可以执行此操作(请注意,我找到了带有@!宏的示例,有些没有,但似乎都不起作用)。
我不太了解院子,但这不起作用吗?有什么类似的东西,我可以做到实现我的结果?是否有一个调试功能可以解释这一点,因为院子服务器控制台没有出现错误?
由于
答案 0 :(得分:0)
正如您已经在宏中指定的那样,它应该针对方法的第一个参数进行扩展,而不是在扩展宏时不需要指定它。此外,似乎无法确定扩展宏的参数。另一件事是你可以在这种情况下跳过[new]
,似乎最好使用@!macro
代替@macro
。
# @!macro my_hash
# @param $1 [Hash,Array<Hash>] Inputted my_hash
# @option $1 [String] :a Value for A.
# @option $1 [String] :b Value for B.
# @option $1 [String] :c Value for C.
##
# my_func does stuff
# @!macro my_hash
def my_func h1
end
##
# other_func does stuff
# @!macro my_hash
def other_func h2, a, b
end
答案 1 :(得分:0)
我相信你可以使用YARD Reference Tags来完成你想要的东西。
来自文档:
如果标签的数据以
(see OBJECT)
开头,则视为“参考” 标记“。参考标记按字母顺序复制给定标记的标记数据 来自指定OBJECT的名称。例如,方法可以复制所有 @param使用引用标记语法从给定对象标记:# @param [String] user the username for the operation # @param [String] host the host that this user is associated with # @param [Time] time the time that this operation took place def clean(user, host, time = Time.now) end # @param (see #clean) def activate(user, host, time = Time.now) end
答案 2 :(得分:0)
这适用于yardoc 0.9.8(可能是任何版本):
# @!macro my_hash
# @param $1 [Hash,Array<Hash>] Inputted my_hash
# @option $1 [String] :a Value for A.
# @option $1 [String] :b Value for B.
# @option $1 [String] :c Value for C.
##
# my_func does stuff
# @macro my_hash
def my_func h1
end
##
# other_func does stuff
# @macro my_hash
def other_func h2, a, b
end
注意丢失的感叹号!用@macro
调用宏时。这是正确的yardoc syntax。