为了简单起见,我从我打算做的所有类型中删除了所有类型,并在此处使用了一个简单的列表。想象一下,我有一个带有两个参数的函数:一个集合和一个函数,并使用它来生成一个新的集合。
我知道!这看起来像重新发明地图,但实际的用例更加不同和复杂。到目前为止我尝试过的是:
trait SomeHelper {
class CoolFunction( right: String => Boolean ) extends Function1[List[String], List[Any]] {
inst =>
override def apply( left: List[ String ] ): List[ Any ] = {
left match {
case a: List[String] => a.filter( right )
case _ => List()
}
}
}
def coolFunction( right: String => Boolean ) = new CoolFunction( right )
}
object SomeHelper extends SomeHelper
import SomeHelper._
val myList = List("apple", "orange", "banana")
myList coolFunction {
a => a == "orange"
}
生成一个"值coolFunction不是List [String]"
的成员感觉我好近,但无法弄清楚
答案 0 :(得分:0)
我猜你可以使用隐式类。它们允许在现有类型上添加方法。
implicit class MyListHelper(list: List[String]) {
def doStuff(function: String => Any): List[Any] = {
list.map(function)
}
}
并像这样使用它:
import MyListHelper
val list = List("a", "b", "c")
val result = list.doStuff(s => s + s) // List("aa", "bb", "cc")