13

私はscalaを学び始めたばかりです。再帰関数を実装しようとしているときに、Eclipse で「不正な単純式の開始」というエラーが発生しました。

def foo(total: Int, nums: List[Int]): 
  if(total % nums.sorted.head != 0)
    0
  else 
    recur(total, nums.sorted.reverse, 0)

def recur(total: Int, nums: List[Int], index: Int): Int =
  var sum = 0 // ***** This line complained "illegal start of simple expression"
              // ... other codes unrelated to the question. A return value is included.

(再帰)関数内で変数を定義することについて私が間違っていたことを誰か教えてもらえますか? オンラインで検索しましたが、このエラーを説明することはできません。

4

4 に答える 4

11

変数宣言 ( var) は値を返さないため、何らかの方法で値を返す必要があります。コードは次のようになります。

object Main {

  def foo(total: Int, coins: List[Int]): Int = {

    if (total % coins.sorted.head != 0)
      0
    else
      recur(total, coins.sorted.reverse, 0)

    def recur(total: Int, coins: List[Int], index: Int): Int = {
      var sum = 0
      sum
    }

  }


}
于 2013-04-12T03:43:54.380 に答える
2

recurインデントはそれが内側にあることを暗示しているようですが、それを配置して囲んでcountいないため、単なるif-elseであり、単なる(これは違法です-何かを返さなければなりません)。{}countrecurvar

于 2013-04-12T03:42:59.503 に答える
0

同様の問題がありました。次のような書籍の例 8.1 を見つけました。

object LongLines {

def processFile(filename: String, width: Int) **{**
  val source = Source.fromFile(filename)
  for (line <- source.getLines) 
    processLine(filename, width, line)
**}**

注: "def processFile(filename: String, width: Int) {" および末尾の "}"

「メソッド」本体を {} で囲み、scala でエラー メッセージなしでコンパイルしました。

于 2013-06-29T18:39:51.047 に答える