Ruby可选参数和多个参数

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".有没有办法完成这种行为?

Nei*_*ter 5

这在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)