私は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.
(再帰的)関数内で変数を定義する際に間違ったことを誰かに教えてもらえますか?オンラインで検索しましたが、このエラーを説明することはできません。
変数宣言(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
}
}
}
インデントはrecur
がcount
の内側にあることを示しているようですが、{
と}
を配置していないため、count
は単なるif-else、およびrecur
は単なるvar
です(これは違法です。何かを返す必要があります)。
同様の問題がありました。本の中で次のような例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エラーメッセージなしでコンパイルしました。