4

在github API v3中找到了一个方法定义,不知道是什么意思args=(not_set = true)

你能告诉我一些用法的例子吗?谢谢。

# Acts as setter and getter for api requests arguments parsing.
#
# Returns Arguments instance.
#
def arguments(args=(not_set = true), options={}, &block)
  if not_set
    @arguments
  else
    @arguments = Arguments.new(self, options).parse(*args, &block)
  end
end
4

3 回答 3

4

有趣的问题不是代码是如何工作的:如果args没有通过,代码not_set = true将被评估。

相反,重要的问题是为什么有人会遇到这个麻烦?毕竟,更简单的替代方案通常工作得很好:

def arguments(args = nil)
  if args.nil?
    ...
  else
    ...
  end
end

但是,这种方法不允许您区分这两个调用:

arguments()
arguments(nil)

如果这种区别很重要,您可以使用您发布的代码中的方法。

于 2013-07-02T16:19:47.620 回答
2

仅当args您不传递任何数据时才会触发 setter 方法。

如果你这样做:

arguments("foo")

然后:

  • args #=> "foo"
  • not_set #=> nil这是假的

如果你这样做:

arguments()

然后:

  • args #=> nil
  • not_set #=> true

简而言之:这是检查一个 arg 是否真的设置的一种非常简洁的方法。

于 2013-07-02T16:02:26.927 回答
2

根据此博客,参数的默认值可以是执行表达式的结果。因此,他们正在做的是在表达式中设置一个标志 (not_set=true) 并将其用作默认值。因此,在未指定“args”的情况下,将评估表达式 (not_set=true)。

阅读链接以获得真正有趣的示例

于 2013-07-02T16:06:59.713 回答