私は関数を書いていて奇妙な問題があります。私は、パターンマッチングを使用して、わずかに変化はなく、ほぼ同一のパターンを使用し、コンパイルされていない、内部機能しています:ネストされた関数は、その親の戻り値の型を歪めます
def isTriangular(n: Int): Boolean = {
n match {
case n if n < 1 => false
case _ => triangularMaths(n, 1)
}
def triangularMaths(j:Int, counter: Int): Boolean = (j, counter) match {
case _ if j-counter == 0 => true
case _ if j-counter < 0 => false
case _ => triangularMaths(j-counter, counter+1)
}
}
を、このための修正プログラムは、私は単に彼らに2つの別々のメソッドを作成している、と彼らtriangularMaths
がネストされていない限り動作します。ただし、triangularMaths
はtriangular
にのみ固有なので、入れ子にしたいと思います。しかし、私がこれを行うと、私のコンパイラは、Boolean
ではなくUnit
を返すと私に言っている。これは意味をなさない。元の大括弧が解決されて真または偽を返すようになると、メソッドの最後に移動して完了する必要がありますか?修正は何ですか?
ヒント:メソッドの戻り値は、メソッドで評価された最後の式の値です。ヒント#2:メソッドで評価された最後の式は何ですか?ヒント#3:関数定義の値は何ですか? –