Я пишу функцию и имею странную проблему. Я использую сопоставление с образцом, а затем внутренняя функция, которая использует слегка измененную, но практически идентичную картину и не компиляции:Вложенная функция возвращает тип возврата своего родителя
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)
}
}
Исправление для этого я просто сделать их два отдельных методами, и они работать до тех пор, пока triangularMaths
не вложен. Однако, поскольку triangularMaths
относится только к triangular
, я бы хотел, чтобы он был вложен. Однако, когда я это делаю, мой компилятор жалуется, говоря мне, что я возвращаю Unit
, а не ожидаемый Boolean
. Это не имеет никакого смысла, поскольку, как только исходные скобки случая разрешены, возвращая true или false, он должен перейти к концу метода и завершить, исправить? В чем проблема?
Подсказка: возвращаемое значение метода - это значение последнего выражения, оцененного в методе. Подсказка №2: каково последнее выражение, вычисленное в методе? Подсказка №3: каково значение определения функции? –