繁体   English   中英

参数'args =(not_set = true)'在红宝石中意味着什么?

[英]What does the parameter 'args=(not_set = true)' mean in ruby?

我在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

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

相反,重要的问题是为什么有人会遇到这种麻烦 毕竟,更简单的替代方案通常可以正常工作:

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

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

arguments()
arguments(nil)

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

只有在不传递数据时才会触发args setter方法。

如果你这样做:

arguments("foo")

然后:

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

如果你这样做:

arguments()

然后:

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

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

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

阅读链接,了解真正有趣的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM