And*_*kes 4 ruby parameters arguments optional-parameters
我试图将方法的第一个参数设置为可选,然后是任意数量的args.例如:
def dothis(value=0, *args)
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,这似乎不太可能吗?当我打电话时dothis("hey", "how are you", "good")我希望它将值设置为默认值为0,但它只是制作value="hey".有没有办法完成这种行为?
这在Ruby中是不可能的
但是有很多选择,取决于你对扩展的params做了什么,以及该方法的目的是什么.
明显的选择是
1)使用哈希语法获取命名参数
def dothis params
value = params[:value] || 0
list_of_stuff = params[:list] || []
Run Code Online (Sandbox Code Playgroud)
Ruby有很好的调用约定,你不需要提供hash {}括号
dothis :list => ["hey", "how are you", "good"]
Run Code Online (Sandbox Code Playgroud)
2)将值移到最后,并为第一个参数取一个数组
def dothis list_of_stuff, value=0
Run Code Online (Sandbox Code Playgroud)
这样称呼:
dothis ["hey", "how are you", "good"], 17
Run Code Online (Sandbox Code Playgroud)
3)使用代码块提供列表
dothis value = 0
list_of_stuff = yield
Run Code Online (Sandbox Code Playgroud)
这样称呼
dothis { ["hey", "how are you", "good"] }
Run Code Online (Sandbox Code Playgroud)
4)Ruby 2.0引入了名为hash的参数,它为你处理了很多选项1:
def dothis value: 0, list: []
# Local variables value and list already defined
# and defaulted if necessary
Run Code Online (Sandbox Code Playgroud)
调用与(1)相同的方式:
dothis :list => ["hey", "how are you", "good"]
Run Code Online (Sandbox Code Playgroud)