我有以下方法:
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
有没有办法像这样输出而不检查变量nullity?当我调用方法时:
method(5,7)
=> 5
=> 2
=> 7
=> 4
答案 0 :(得分:1)
当您使用此方法时,将按顺序获取参数:
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
电话:
method(5,7)
表示:a = 5,b = 7,c = 3(默认值),d = 4(默认值)
如果没有指定所有其他参数,则无法指定参数。
如果您希望能够指定参数,另一种方法是为所有参数使用哈希:
def method(options)
a = options[:a] || 1
b = options[:b] || 2
c = options[:c] || 3
d = options[:d] || 4
end
然后您可以拨打电话,如:
method(d: 5, c: 7)
=> 1
=> 2
=> 7
=> 5
答案 1 :(得分:1)
正如Taryn East在他的评论中提到的,自Ruby 2.0以来,您可以使用关键字参数来实现您想要做的事情。你只需要稍微改变一下你的方法:
def method(a:1, b:2, c:3, d:4)
puts a
puts b
puts c
puts d
end
然后,您可以调用它来指定要按名称设置的参数,将其他参数保留为默认值:
method(a:5, c:7)
=> 5
=> 2
=> 7
=> 4
另一个好处是,它提高了可读性,并且不会让读者猜测传递值的含义。
答案 2 :(得分:0)
其中一个流行的选择是使用所谓的"命名参数"重新定义您的方法。好吧,它们并不是真正命名的参数,它们只是一个带有一些语法糖的哈希参数。
def method(args)
args = {a: 1, b: 2, c: 3, d: 4}.merge(args)
args.each { |key, val| puts val }
end
method(c: 30, a: 10)
> 10
> 2
> 30
> 4