1

这是怎么回事:

看来我有语法问题。以下两种方法,彼此相似,加载到 irb 罚款。但是,当我去使用它们时,它们会产生错误。由于我只是在学习这一点,因此我不仅在寻找修复程序,而且还想了解为什么两者都返回错误以及任何修复程序如何解决问题。

谢谢你的帮助,
TJ


第一种方法:

def sum(*)
  
  i = 1
  total = sum[0]
  until sum[i] == nil
      total = total + sum[i]
      i += 1
  end
  puts total
  
end

加载此文件后,irb 返回=> nil,没有错误。但是,尝试使用该方法如下所示:

sum 3, 58, 298, 2
Unknown error.

直接在 irb 中写入方法与加载 .rb 文件在第 3 行之后会产生此错误:

def sum(*) 
..   i = 1 
..   total = sum[0]
(eval):2: (eval):2: compile error (SyntaxError)
(eval):2: syntax error, unexpected $end, expecting kEND
total = sum[0]
              ^

现在,我看到它说,SyntaxError但我不知道其余的反馈意味着什么,也不知道它的正确语法是什么。


第二种方法:

def sum(*)
  
  i = 1
  total = sum[0]
  until i == sum.count
      total = total + sum[i]
      i += 1
  end
  puts total
  
end

这个以与第一个相同的方式产生所有相同的错误。

4

1 回答 1

0

试试这个:

def sum(*nums)
  sum = 0
  nums.each  { |num| sum += num }
  sum
end

sum(1, 2, 3)

我不认为 `def sum(*) 是有效的 Ruby 语法;你必须给你的可变参数一个名字。

另外,请参阅这个 Stackoverflow 问题,了解对数字数组求和的更短方法。

于 2013-05-11T16:55:19.060 回答