我有以下方法:红宝石调用可选参数
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
有没有办法像这样的输出,而不检查变量无效?当我打电话等方法:
method(5,7)
=> 5
=> 2
=> 7
=> 4
我有以下方法:红宝石调用可选参数
def method(a=1, b=2, c=3, d=4)
puts a
puts b
puts c
puts d
end
有没有办法像这样的输出,而不检查变量无效?当我打电话等方法:
method(5,7)
=> 5
=> 2
=> 7
=> 4
的参数取入顺序,以便当有此方法:
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(默认值)
没有指定参数的方法,其他人。
如果你希望能够指定参数,另一种是使用哈希为所有PARAMS:
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
你的第二个建议已被关键字参数所弃用。 –
你是对的 - 同样的原则,但更现代的做法 – Martin
一流行的选择是用所谓的“命名参数”重新定义你的方法。那么,它们并不是真正的命名参数,它们只是一些带有一些语法糖的散列参数。
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
这里使用关键字参数的好处是什么?你的代码似乎对我来说同样也更复杂。 –
首先,它适用于Ruby 1.9。二,它仍然是流行的开源库中常用的模式,用于兼容性,而OP将有助于学习这种语法。 – Uzbekjon
好吧,我认为如果你提到这个问题,它会改善你的答案。 –
正如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
作为另一个好处,它提高了可读性,并且不会让读者猜测传递值的含义。
是应该怎么知道你省略b和d,而不是c和d,说什么? –
你有没有考虑使用关键字参数:https://robots.thoughtbot.com/ruby-2-keyword-arguments (否则,没有办法) –