来自String的Scala Filter Chars

b-m*_*m-f 3 string scala

我有以下代码,它应该计算一个字符出现在字符串中的次数.

  def filter[T] (l: List[T], stays: T ? Boolean): List[T] = {
     if( l == Nil ) return Nil
     if (stays(l.head) == true) l.head :: filter(l.tail, stays)
     else filter(l.tail, stays)
  }


  def countChar(s: String): List[(Char, Int)] = {
    if (s == "") Nil
    else (s(0), s.count(_ == s(0))) :: countChar(filter(s.toList, _ == s(0)).mkString)
  }
Run Code Online (Sandbox Code Playgroud)

现在我的问题在于

filter(s.toList, _ == s(0))
Run Code Online (Sandbox Code Playgroud)

我得到错误:缺少参数类型.我明白这来自嵌套功能?

我怎样才能解决这个问题?我知道String有一些方法可以做我想要的但是我想使用我自己的filter方法.

Kol*_*mar 6

这是Scala编译器的限制:它试图找出什么类型Tfilter应该是,用两个参数lstays.但它失败了,因为stays参数的类型未指定.

如果您不想stays每次都指定参数类型(即filter(s.toList, (_: Char) == s(0)),则可以将filter参数列表拆分为两个:

def filter[T] (l: List[T])(stays: T ? Boolean): List[T]
Run Code Online (Sandbox Code Playgroud)

然后斯卡拉就知道TChar用它分析的类型的时间stays.您可以拨打此filterfilter(l.tail)(stays).