ruby调用可选参数

时间:2016-08-17 05:48:09

标签: ruby

我有以下方法:

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

3 个答案:

答案 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