Project1

标题: 问一个白痴问题,Ruby中的可选参数和“*”号的用法 [打印本页]

作者: DeathKing    时间: 2009-12-2 23:44
标题: 问一个白痴问题,Ruby中的可选参数和“*”号的用法
本帖最后由 DeathKing 于 2009-12-3 12:54 编辑

对于这个,我受Visual Basic影响很深。这里就引用Visual Basic的一段代码来做说明。
  1. Function RM_66rpg(UseIE As Boolean, Optional DeathKing As String) As String
  2.     If UseIE = True Then
  3.         If DeathKing <> "" Then
  4.             MsgBox DeathKing & " is using IE"
  5.         Else
  6.             MsgBox "Use IE"
  7.         End If
  8.     Else
  9.         MsgBox "IE is BadEgg!", vbOKOnly
  10.     End If
  11. End Function
复制代码
我这里是随便定义了一个函数(RM_66rpg),这里,需要一个布尔型的参数UseIE,这个是必要的,而DeathKing这个String参数是可选的(因为有Optional的缘故)



现在我使用RM_66rpg这个函数的时候,DeathKing这个参数是可选的就体现出来了(那里有个方括弧)。

我想问的是,Ruby里面到底有没有可选参数的说法。看到有文献(http://book.csdn.net/bookfiles/393/10039314540.shtml)说要在变量名前面加一个“*”号,但是我还是没搞明白。

这里用一段RGSS脚本:
  1. def dk_sum(a,b,c=0)
  2.   return a+b if c==0
  3.   return a+b+c if c!=0
  4. end
复制代码
以前为了突出c变量的可选性,就使用了上面的写法,感觉这样存在弊病也没必要,所以求解。
作者: 迦月    时间: 2009-12-3 01:00
*X  的意思是吸收一切!!!原文是这样写的!
*x记法意味着:在调用该方法时,可以提供任意数目的参数(包括不提供任何参数)。在此例中,变量x被赋给一个数组,该数组包含了方法调用时发送给该方法的所有参数值。你可以遍历数组逐个地检查这些值(第11章将更详细地介绍数组)。

晕乎了!  

再看看的说  不好发言什么!
作者: 紫苏    时间: 2009-12-3 02:40
你提供的 Ruby 脚本 和 VB 的函数参数机制本质上没什么区别,都是给参数一个默认值,只不过一个是在函数内部判断字符串是否为空,一个是判断变量是否为 0,这个可以称之为“可选参数”

至于 * 的作用,用“可变参数列表”来形容更恰当。printf 就是一个典型的例子,可以接受任意 n 个参数~
实际用法:
在某个形式参数前用 * 来修饰它,这样在实际参数传递到该参数时,会把之后所有的参数都捕获到一个数组中,并传递给这个参数引用。之后你可以通过操作这个数组,来引用不同的参数,比如:
def fn(arg1, arg2, *args) ... end
fn("a", "b", "c", "d", 5, false)
arg1 = "a" = 第一个参数
arg2 = "b" = 第二个参数
args[0] = "c" = 第三个参数
args[1] = "d" = 第四个参数
args[2] = 5 = 第五个参数
args[3] = 6 = 第六个参数
作者: 迦月    时间: 2009-12-3 12:13
貌似懂了~~~~~~~    去实验下!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1