*在ruby函数中的含义

时间:2015-11-27 09:54:41

标签: ruby-on-rails ruby

我有一个关于在函数调用中学习*的基本问题,我无法从在线文档中理解:

def self.new(*args, &block)

* args在上面的函数调用中意味着什么?

2 个答案:

答案 0 :(得分:2)

这意味着您可以传递任何数量的参数,这些参数将存储在此方法的args表中。看看:https://endofline.wordpress.com/2011/01/21/the-strange-ruby-splat/

答案 1 :(得分:2)

考虑以下方法

def user(user_name)
  puts user_name
end

所以当你打电话时

user("RPV")

Output: 
RPV
=> nil

但是,如果你传递多个参数,如

,该怎么办?
user("RPV", "Marek")

它会出错

错误的参数数量(2对1)

为了避免这种错误,splat(*)运算符很有帮助

def user(*user_name)
  puts user_name
end

当你传递多个参数时,它会处理它在数组中的转换

user("RPV", "Marek")

output:
RPV
Marek
nil

它使user_name成为一个数组

def user(user_name)
  p user_name
end

user("RPV", "Marek")

output:

 ["RPV", "Marek"]

希望你能使用它。