我在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
答案 0 :(得分:4)
有趣的问题不是代码的工作原理:如果未传递args
,则会评估代码not_set = true
。
相反,重要的问题是为什么有人会遇到这种麻烦?毕竟,更简单的替代方案通常可以正常工作:
def arguments(args = nil)
if args.nil?
...
else
...
end
end
但是,这种方法不允许您区分这两个调用:
arguments()
arguments(nil)
如果这种区别很重要,您可以使用类似您发布的代码中的方法。
答案 1 :(得分:2)
只有在您没有传递数据时才会触发args
setter方法。
如果你这样做:
arguments("foo")
然后:
args #=> "foo"
not_set #=> nil
这是假的如果你这样做:
arguments()
然后:
args #=> nil
not_set #=> true
简而言之:检查一个arg是否确实设置是一种非常简洁的方法。
答案 2 :(得分:2)
根据此blog,参数的默认值可以是已执行表达式的结果。因此,他们正在做的是在表达式中设置一个标志(not_set = true)并将其用作默认值。因此,在未指定“args”的情况下,将评估表达式(not_set = true)。