使用YARD记录“splatted”参数的最佳方法是什么?

时间:2015-05-23 18:28:13

标签: ruby parameters documentation yard splat

我有一个方法应该采用任何类的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的东西。

1 个答案:

答案 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