Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby语法错误:语法错误,意外'=';,应为';)';_Ruby_Default Parameters - Fatal编程技术网

Ruby语法错误:语法错误,意外'=';,应为';)';

Ruby语法错误:语法错误,意外'=';,应为';)';,ruby,default-parameters,Ruby,Default Parameters,我正在尝试在方法中传递默认参数,但到目前为止还不能这样做。我已经用下面的签名编写了一个方法 def abc(a,b=22,c,d=55) end 我得到的上述代码错误为“语法错误,意外的'=',预期的'')” 如果我用下面显示的代码替换上面的代码,那么它就可以正常工作 def abc(a,b=5,c) end 这可能是什么原因 谢谢您不能以这种方式混合默认/非默认参数 Ruby怎么知道abc(1,2,3)是什么意思?您是否提供a、b、c或a、c、d?从Ruby文档中获取默认值,b或d?:

我正在尝试在方法中传递默认参数,但到目前为止还不能这样做。我已经用下面的签名编写了一个方法

def abc(a,b=22,c,d=55)
end
我得到的上述代码错误为“语法错误,意外的'=',预期的'')”

如果我用下面显示的代码替换上面的代码,那么它就可以正常工作

def abc(a,b=5,c)

end
这可能是什么原因


谢谢

您不能以这种方式混合默认/非默认参数


Ruby怎么知道abc(1,2,3)是什么意思?您是否提供
a、b、c
a、c、d
?从Ruby文档中获取默认值,
b
d

参数可能具有默认值:

def add_values(a, b = 1)
  a + b
end
默认值不需要首先出现,但需要使用 默认值必须分组在一起。这没关系:

def add_values(a = 1, b = 2, c)
  a + b + c
end
这将引发SyntaxError:

def add_values(a = 1, b, c = 1)
  a + b + c
end

我认为,问题是当你传递不同数量的参数时会发生什么

abc(1,2,3,4)
a=1, b=2, c=3, d=4
很清楚任务应该是什么

但是,您怎么可能无法设置第二个参数呢

这是缺少第二个参数还是第四个参数?默认值是多少

abc(m, t, z)
我怎么能漏掉第二个参数,而留下第三个有用的值——一个没有默认值的参数

您应该将默认参数分组在一起:

def abc(a=25, b=6, c, d)
或:

这样,行为就更容易预测了


不过,您可能应该查看选项哈希。传递变量参数的一种更灵活的方法和一些处理缺少参数的简洁方法。

出于好奇,我在IRB中测试了这一点,并添加到您的答案中,我强烈建议OP使用默认值定义参数作为方法符号中的最后一个参数的做法。当在其他地方进行此操作时,从用户的角度来看,可能会导致意外的结果。1.9.3-p547:001>def abc(a,b=22,c);把“a:{a},b:{b},c:{c}”;完1.9.3-p547:004>abc(10,20)#=>a:10,b:22,c:20 1.9.3-p547:005>abc(1,2,3)#=>a:1,b:2,c:3
abc(1,2,3,4)
a=1, b=2, c=3, d=4