我有以下代码,它应该计算一个字符出现在字符串中的次数.
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方法.
这是Scala编译器的限制:它试图找出什么类型T的filter应该是,用两个参数l和stays.但它失败了,因为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)
然后斯卡拉就知道T是Char用它分析的类型的时间stays.您可以拨打此filter用filter(l.tail)(stays).
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |