【发布时间】:2020-02-09 08:08:14
【问题描述】:
这是关于锻炼的问题。到目前为止,使每个解决方案都成为类方法似乎是一种奇怪的处理方式,但这不是我的主意。无论如何这里是代码:
class ResistorColorDuo
@@colors = %w(
black
brown
red
orange
yellow
green
blue
violet
grey
white)
def self.value(array)
@@colors.index array[0] * 10 + @@colors.index array[1]
end
end
错误信息:
Traceback (most recent call last):
1: from resistor_color_duo_test.rb:2:in `<main>'
resistor_color_duo_test.rb:2:in `require_relative': /home/muhammad/exercism/ruby/resistor-color-duo/resistor_color_duo.rb:15: syntax error, unexpected tIDENTIFIER, expecting keyword_end (SyntaxError)
...0]) * 10 + @@colors.index array[1]
我没有看到问题,因为end 关键字都得到了适当的平衡。我应该如何解决这个问题?
【问题讨论】:
-
您可能希望使用括号来确保您的代码按预期进行评估。例如。我想你想要这样的东西:
@@colors.index(array[0]) * 10 + @@colors.index(array[1]) -
我的印象是括号在这种情况下是可选的。来自 Python(和 JS 以及我曾经使用过的几乎所有其他东西)的奇怪怪癖。但这确实解决了问题。将其发布为答案,我会接受。
-
对于@dinjas 的评论,当您将
@@colors.index array[1]更改为@@colors.index(array[1])时,它会编译,但除此之外,我不确定您将括号可视化的位置。括号,即使可能不需要,也可以使您的代码更具可读性,并避免类似这样的错误。 -
@readyready15728 括号是可选的,但出于优先考虑,您不想在大多数情况下将它们排除在外。如果该语句在没有括号的情况下编译,它将按照
@@colors.index((array[0] * 10) + @@colors.index(array[1]))的行执行 -
@dinjas 我相信这是说它期望该行的其余部分成为第一个
index方法的参数,之后它期望end关键字,但它得到了另一个带有空格参数的index方法调用。如果将第二个index方法的参数括起来,错误就会消失。关于tIDENTIFIER是什么的文档并不多,但是当省略引号或括号或其他内容时,通常会出现“意外的 tIDENTIFIER”错误。并不意味着 OP 遗漏了end,而是它正在寻找end并遇到了其他问题。
标签: ruby syntax compiler-errors syntax-error