9

我有一个使用Forwardable模块中的def_delegators方法的类。我还没有找到让Yardoc为其输出文档的方法。我尝试使用,但它不会为这些特定方法输出任何内容(文件中的其他所有内容都很好,并且没有错误),而且我有几个不同的长度。def_delegators

例如

class A
  extend Forwardable
  # other code…

  # @!macro
  #   @see Array#$1
  #   @see Array#$2
  #   @see Array#$3
  def_delegators :@xs, :size, :<<, :blah # …

如果有人知道宝石或这样做的方法,这意味着我可以避免尝试编写 Yard 扩展来执行此操作,我将非常感激。

4

3 回答 3

5

经过更多的实验,我发现这非常有效:

  # @!method size
  #   @see Array#size
  # @!method <<
  #   @see Array#<<
  # @!method blah
  #   @see Array#blah
  def_delegators :@xs, :size, :<<, :blah # …

很可能有一种方法可以用一两行代码做到这一点,但与编写扩展的工作相比,我觉得这非常可接受。


更新:

我刚刚发现这将更好地链接到委托方法的文档:

  # @!method size
  #   @return (see Array#size)

这将从 Array#size 方法中获取已记录的返回值。我希望其他标签也会这样做。它仍然很冗长,但可以接受。

于 2013-02-15T09:35:34.033 回答
1

您需要将这两个概念结合起来。使用@!macro 产生一个@!method。

以下是我的解决方案版本。但对我来说问题是 OptParser 不包括在内,所以 See 也没有链接。第二个缺点是方法的签名、参数和返回值没有描述。第三个 ick 是字符串 OptParser 是固定的,但确实需要能够调整(参数化)。

如果它转发到项目中包含的方法,那么您可以使用(参见 Foo#method)(在这种情况下没有 @ 符号)并且 Foo#method 中的任何内容都将被复制到新源中。这可以通过在宏内部执行(参见 Foo#$2)来完成——包括括号。查看YARD 的参考标签

# @!macro [attach] def_delegators
#   @!method $2
#     Forwards to $1.
#     @see OptParser#$2
def_delegators :opt_parser, :order!
def_delegators :opt_parser, :on
def_delegators :opt_parser, :on_head
def_delegators :opt_parser, :on_tail
def_delegators :opt_parser, :help
def_delegators :opt_parser, :add_officious
def_delegators :opt_parser, :banner
def_delegators :opt_parser, :banner=
def_delegators :opt_parser, :program_name
def_delegators :opt_parser, :abort
def_delegators :opt_parser, :release
def_delegators :opt_parser, :release=
def_delegators :opt_parser, :version
def_delegators :opt_parser, :version=
于 2015-12-21T15:06:27.587 回答
0

这对我有用。

# @!method do_this
#   @return [mixed] See {Instance#do_this}.
# @!method do_that
#   @return [mixed] See {Instance#do_that}.
delegate *[
  :do_this,
  :do_that,
], to: :instance

其他:

  • gemyard-delegate不适用于这种构造。不过它已经很旧了。
  • 放在# @!method个人之上:method是行不通的(被 YARD 忽略)。
  • 更好地指定实际的方法返回值,它会为读者生成一个更舒适的列表。
于 2017-11-03T10:51:05.100 回答