鉴于方法:
def foo(a,b=5,c=1)
return a+(b*c)
end
Run Code Online (Sandbox Code Playgroud)
跑步foo(1)应该回来6.但是,你会怎么做这样的事情:foo(1,DEFAULT,2).我需要更改第三个值,但使用默认的第二个值.
你会怎么做?(注意:我不能只改变变量的顺序,因为它们是来自gem的方法的参数)
mat*_*att 10
在提出的条款中你不能这样做.这种情况正是为什么在Ruby 2中引入了命名(关键字)参数的原因.但根据问题的条款,您的默认值参数未命名.
因此,它们是位置的 - 这就是可选参数必须最后的原因 - 因此,规则必须使用至少一个参数调用此方法(因为a它不是可选的),并且任何其他参数将在提供的订单填写相应的参数.
因此,您可以提供a,或a和b,或a和b和c.如果这些参数被命名,您可以轻松地提供a和c单独供应.
我想到了两个明显的解决方案.
调用方法,提供第二个参数的默认值作为第二个参数.大概你知道它是什么,所以这并不是一件困难的事情:
foo(1,5,2)
Run Code Online (Sandbox Code Playgroud)编写一个trampoline方法,它执行相同的操作,但参数的名称是:
def foo(a,b=5,c=1)
return a+(b*c)
end
def bar(a,b:5,c:1)
return foo(a,b,c)
end
bar(1,c:2) # => 11
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5537 次 |
| 最近记录: |