Ruby中语法不明确的错误:使用无效运算符时出现“语法错误,意外结束”

问题描述 投票:0回答:1

我试图弄清为什么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 syntax
1个回答
1
投票

在Ruby中,允许运算符与其操作数之间具有空格。这包括换行符,并且包括一元前缀运算符。因此,以下是完全有效的Ruby:

+
foo

与]相同>

+ foo

与]相同>

+foo

与]相同>

foo.+@()

以下也是完全有效的Ruby:

foo++
bar

与]相同>

foo ++ bar

与]相同>

foo + + bar

与]相同>

foo + +bar

与]相同>

foo.+(bar.+@())

所以,如您所见,该行

level++

单独是不是

在语法上无效。 << next>行上的end使此无效。错误消息的确切含义是:您使用的是一元前缀+运算符,因此Ruby期望使用操作数,但是却找到了期望的end
© www.soinside.com 2019 - 2024. All rights reserved.