web-dev-qa-db-ja.com

Scalaでの単純な式の不正な開始

私は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.

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

12
ChuanRocks

変数宣言(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
    }

  }


}
6

インデントはrecurcountの内側にあることを示しているようですが、{}を配置していないため、countは単なるif-else、およびrecurは単なるvarです(これは違法です。何かを返す必要があります)。

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){" and ending "}"

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

0
Vito