【问题标题】:If statement syntax error, unexpected keyword_endif语句语法错误,意外keyword_end
【发布时间】:2024-07-22 00:35:01
【问题描述】:

我正在hackerrank 上做一个练习,要求我比较一组三胞胎以获得分数。在我最初提交之后,我想尝试一些更优雅的东西(也就是说条件更少),所以我编写了以下代码:

def solve(a0, a1, a2, b0, b1, b2)
    # Complete this function
    aS = 0
    bS = 0

    alpha = [a0, a1, a2]
    beta = [b0, b1, b2]

     (1..3).each do |i|
         if (alpha.(i) > beta.(i)) then aS++ end
         if (alpha.(i) < beta.(i)) then bS++ end
     end   

    return aS, bS

end

但我收到以下错误:

solution.rb:12: syntax error, unexpected keyword_end
.(i) > beta.(i)) then aS++ end
                              ^
solution.rb:13: syntax error, unexpected keyword_end
.(i) < beta.(i)) then bS++ end
                              ^
solution.rb:31: syntax error, unexpected end-of-input, expecting keyword_end

如果我删除每个 if 语句的 end,我会收到一个新错误,指出语法错误,意外的输入结束,期望关键字_end 在类的 end 上。

我最好的猜测是我没有正确关闭或构建我的 if,我希望有人能指出我正确的方向。

【问题讨论】:

    标签: ruby


    【解决方案1】:

    Ruby 没有增量一元运算符。而是做bS+=1。请参阅以下内容作为使用 irb 的修复示例

    irb(main):001:0> x = 2
    => 2
    irb(main):002:0> if x > 1 then x++ end
    SyntaxError: (irb):2: syntax error, unexpected keyword_end
        from /opt/chefdk/embedded/bin/irb:11:in `<main>'
    irb(main):003:0> if x > 1 then x+=1 end
    => 3
    

    【讨论】:

      【解决方案2】:

      Ruby 中没有增量运算符++,而是使用value += 1

      尝试:

      def solve(a0, a1, a2, b0, b1, b2)
        aS = 0
        bS = 0
      
        alpha = [a0, a1, a2]
        beta  = [b0, b1, b2]
      
        (0..2).to_a.each do |i|
          aS += 1 if alpha[i] > beta[i]
          bS += 1 if alpha[i] < beta[i]
        end   
      
        [aS, bS]
      end
      
      p solve(1, 2, 3, 4, 5, 6)
      # => [0, 3]
      

      在 Ruby 中,您无需指定 return,它将是您放入函数(或范围)中的最后一个值,您还必须转换为数组范围(1..3),并且当您使用它的每个索引来检查您的 alphabeta 数组时,当索引采用数字 3 时,您将得到 nil,因为这些数组上没有索引 3,请尝试使用 @ 987654328@

      要增加初始变量,请使用 += 而不是 ++ 并检查数组的索引,您可以使用方括号 alpha[i] 来执行此操作(不需要使用点或方法编写)。

      要返回多个值,这次尝试将其作为数组进行,“普通”对象会抛出 syntax error

      if ... then ... end可以简写为do_something if this_happens

      【讨论】: