[英]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.