scala:返回方法的值并提前结束方法

时间:2012-09-28 00:44:57

标签: scala

我刚刚开始Scala,所以请耐心等待。

我正在编写一个方法,根据给定列表中的“*”数返回布尔值。

def stars(n: Int, chars: List[Char]): Boolean = {
  var count = 0
  chars.foreach{ letter =>
    if (letter == "*") {
      count += 1
    }
    if (count == n) {
      return true
    }

  }
  false
}                                               //> stars: (n: Int, chars: List[Char])Boolean

stars(5, "******".toList)                       //> res12: Boolean = false

那应该是真的。因为它应该在计数变为5时过早结束,这等于n

我做错了什么?

scala是否允许使用return语句提前结束方法?

1 个答案:

答案 0 :(得分:4)

if (letter == "*")中,您要将字符串与字符串进行比较,从而不断变为虚假,而count += 1永远不会被评估 你必须写if (letter == '*')而不是

实际上,更惯用的代码是:

def stars(n: Int, chars: List[Char]): Boolean = {
  n == chars.count(c => c == '*')
}