Jac*_*lyn 5 ruby parameters optional-parameters
如果我在Ruby中有以下方法:
def foo(arg1, arg2 = "bar")
puts arg1
puts arg2
end
Run Code Online (Sandbox Code Playgroud)
有没有办法确定用户是否在方法中传递了值arg2?显然我可以添加if arg2 == "bar"到方法中,但这并没有捕获用户手动传入的情况"bar".当然,我可以将默认设置为没有用户可以传递的内容,但随后很快就变得非常难看.
那里有什么优雅的东西吗?
Jör*_*tag 16
def foo(arg1, arg2 = (arg2_not_passed = true; "bar"))
puts arg1
puts arg2
puts 'arg2 was passed' unless arg2_not_passed
end
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可能。考虑以下:
class Test
def method(a,b=1)
local_variables.each do |var|
puts "Setting #{var} to #{eval var.to_s}"
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后尝试调用method以下实例Test:
?> t.method(1)
Setting a to 1
Setting b to 1
=> [:a, :b]
?> t.method(1,2)
Setting a to 1
Setting b to 2
=> [:a, :b]
?> t.method(1,1)
Setting a to 1
Setting b to 1
=> [:a, :b]
Run Code Online (Sandbox Code Playgroud)
这些不区分方法的调用方式。
所以我建议将 @sawa 的方法与以下方法混合:
raise ArgumentError, "Too many arguments" if args.length > 2
Run Code Online (Sandbox Code Playgroud)
因为您似乎想将参数限制为 2 并且 @sawa 的方法允许未定义的数字。
这是针对非正统需求的非正统方法,因此只需确保您的方法的客户端了解 API 的工作原理即可。
| 归档时间: |
|
| 查看次数: |
3423 次 |
| 最近记录: |