我不小心在数组的push方法和参数之间添加了一个空格,所以我得到了这个:
def add_credit(description, amount)
@credits.push ( description: description, amount: amount )
end
并导致错误:syntax error, unexpected tLABEL @credits.push ( description: description, amount: amount ) ^
在“推”之后删除了空格后,它就消失了。空间如何影响Ruby中的语法?
答案 0 :(得分:1)
问题的原因是Ruby解释器无法弄清楚这是一种方法的括号还是参数。
例如,如果您使用"简单"传递参数。你的方法的语法,它会工作得很好:
[1, 2].include? 1 # => true
[1, 2].include? (1) # => true
[1, 2].include? ( [ ] ) # => true
Ruby解释器可以猜测那些括号属于方法。
但是,如果你试图传递一个没有"简单"语法,例如散列(a: 1
)或范围((1..2)
),会导致错误:
[1, 2].include?(a: 1) # => false
[1, 2].include? ({a: 1}) # => false
[1, 2].include? (a: 1) # => SyntaxError: (irb):21: syntax error, unexpected tLABEL
[1, 2].include? (1..2) # => false
由于Ruby解释器现在认为您正在尝试传递Range
作为参数。并且,key: 'value'
语法不是有效的范围定义语法。
因此,Ruby解释器要求你清楚地使用大括号,并帮助它清楚地识别,如果它是方法的大括号或参数。因为,通过空格,您传递的是Range
。见最后一行。