我试图弄清为什么Ruby报告了它的语法错误,以及为什么它不能更加清楚。以下代码段给了我一个“语法错误,意外结束”
# @param {NestedInteger[]} nested_list
# @return {Integer}
def depth_sum(nested_list)
queue = Queue.new
nested_list.each { |element| queue.enq element }
result = 0
level = 1
until queue.empty?
size = queue.size
size.times do
element = queue.pop
if element.is_integer
result += level * element.get_Integer
else
element.each { |elem| queue.enq(elem) }
end
end
level++
end
end
然后我发现Ruby没有++运算符,所以我用level + = 1替换了level ++,并且代码起作用了。但是为什么Ruby的语法错误消息对于意外的结束如此神秘,而实际上我的错误不是由于“ end”,而是因为我使用的是Ruby中未使用的++运算符。
在Ruby中,允许运算符与其操作数之间具有空格。这包括换行符,并且包括一元前缀运算符。因此,以下是完全有效的Ruby:
+
foo
与]相同>
+ foo
与]相同>
+foo
与]相同>
foo.+@()
以下也是完全有效的Ruby:
foo++ bar
与]相同>
foo ++ bar
与]相同>
foo + + bar
与]相同>
foo + +bar
与]相同>
foo.+(bar.+@())
所以,如您所见,该行
在语法上无效。 << next>行上的level++
单独是不是
end
使此无效。错误消息的确切含义是:您使用的是一元前缀+
运算符,因此Ruby期望使用操作数,但是却找到了期望的end
。