我有一个方法应该采用任何类的1+个参数,类似于Array#push:
def my_push(*objects)
raise ArgumentError, 'Needs 1+ arguments' if objects.empty?
objects.each do |obj|
puts "An object was pushed: #{obj.inspect}"
@my_array.push obj
end
end
使用YARD语法记录方法参数的最佳方法是什么?
修改
我意识到我原来的问题有点过于模糊,并没有明确说明我在寻找什么。
更好的问题是,在使用splatted参数时,在YARD中指定方法的arity(在这种情况下为1-∞)的最佳方法是什么?我知道我可以在文本中指定它,但似乎应该是一个标签或类似于指定arity的东西。
答案 0 :(得分:7)
YARD的创作者lsegal表示the appropriate thing to do is provide an @overload
for expected invocations。但是,对于类似Array#push
的方法,这并没有真正提供清晰度。
我建议您使用@param
标记并使用Array<Object>
作为参数类型,或者提供看起来不错的@overload
。
以下是两者的比较:
class Test
# A test method
#
# @param [Array<Object>] *args Any number of Objects to push into this collection
# @return nil
def push(*args); end
# Another test method
#
# @overload push2(obj, ...)
# @param [Object] obj An Object to push
# @param [Object] ... More Objects
def push2(*args); end
end