在添加一些空格以使代码更具可读性(与上面的代码对齐)时,我遇到了这个:
class C
def x
42
end
end
m=C.new
Run Code Online (Sandbox Code Playgroud)
现在这将给出"错误的参数数量":
m.x *m.x
Run Code Online (Sandbox Code Playgroud)
这将给出"语法错误,意外的tSTAR,期待$ end":
2/m.x *m.x
Run Code Online (Sandbox Code Playgroud)
这里的解析器究竟发生了什么?
我测试了Ruby 1.9.2和2.1.5.
*用于operator(42 * 42)和参数解包(myfun *[42, 42]).
当你这样做时:
m.x *m.x
2/m.x *m.x
Run Code Online (Sandbox Code Playgroud)
Ruby将其解释为参数解包,而不是*运算符(即乘法).
如果您不熟悉它,参数解包(有时也称为"splat"或"splats")意味着您可以拥有如下函数:
def myfun arg1, arg2; end
Run Code Online (Sandbox Code Playgroud)
并称之为:
myfun(*['Hello', 'World'])
Run Code Online (Sandbox Code Playgroud)
arg1设置为Hello,并arg2设置为World.
我相信规则是要确定使用的是:
*- >参数解包*操作符,因为Ruby会进行运算符重载).好的指导方针是:
*打算*运算符之前和之后使用空格(乘法).当你运行时,Ruby实际上会警告你ruby -v:
test.rb|11 warning| `*' interpreted as argument prefix
test.rb|12 warning| `*' interpreted as argument prefix
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |