【发布时间】:2017-06-18 04:42:39
【问题描述】:
我正在编写一个函数并遇到一个奇怪的问题。我正在使用模式匹配,然后是一个内部函数,它使用了一个稍微改变但几乎相同的模式并且它没有编译:
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。这不太有意义,因为一旦解决了原始 case 括号,返回 true 或 false,它应该到方法的末尾,并且完成,对吗?解决方法是什么?
【问题讨论】:
-
提示:方法的返回值是方法中计算的最后一个表达式的值。提示 #2:方法中评估的最后一个表达式是什么?提示 #3:函数定义的价值是什么?
标签: scala pattern-matching case