1

これはどうなっているのですか:

構文に問題があるようです。次の方法はどちらも、互いに似ていますが、irb に正常にロードされます。ただし、それらを使用すると、エラーが発生します。私はこれを学んでいるので、修正を探しているだけでなく、両方がエラーを返す理由と、問題を解決するために修正がどのように機能するかを理解しようとしています。

助けてくれてありがとう、
TJ


最初の方法:

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

このファイルをロードする=> nilと、irb は を返します。エラーはありません。ただし、メソッドを使用しようとすると、次のようになります。

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のはわかりますが、残りのフィードバックが何を意味するのか、これの適切な構文は何なのかわかりません。


2 番目の方法:

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 構文ではないと思います。vararg に名前を付ける必要があります。

また、数値の配列を合計するさらに短い方法については、この Stackoverflow の質問を参照してください。

于 2013-05-11T16:55:19.060 に答える