2011-12-31 82 views
2

我开始学习Ruby。我通过引用方法读取了参数,但是我不明白这两种方法之间的区别。这两个方法参数定义有什么区别?

def print(text) 
    puts text 
end 

def print(*text) 
    puts text 
end 

使用*意味着我们是用C语言指针传递什么样的?

回答

5

*文本在Ruby中被称为splat操作符。它基本上意味着,如果您将多个参数传递给第二个打印文件,它们将会变成单个文本变量。

参见The Splat Operator in Ruby

4

在Ruby参数列表中的参数名称用于variable length arguments之前的*,因此它们类似于C/C++中的... for varargs。

def vlaFunc(*args) 
    puts args 
end 

vlaFunc(1,2,3) 

# output is [1,2,3] 
+0

好的非常感谢你。 – 2011-12-31 17:32:35

2

有在红宝石,*没有指针在这种情况下,通常被称为 “图示” 操作符:

在这种情况下,该方法可以接受任意数量的参数,这些参数将可用在数组text

+0

我宁愿说在Ruby中只有*指针:-) – 2011-12-31 19:13:03

+0

呵呵,可以这么说,但也许不在Ruby新手线程中。 ;-) – 2012-01-01 01:50:11

0

首先你有两个很好的方法在那里开始。但我会说尽量避免在他们中使用放入。无论如何你都不需要它。一个方法总是会产生最后一个评估的语句。东西=文本将完成工作。我现在不需要回答这些差异。 你的前两个回复非常好。但你可能想尝试一下这样的东西 j = * []#=> 1.8中的零而1.9中的是[] 现在这个区块已经是新的孩子了。猜猜它是干什么的?