Scala创建一个在现有类型上运行的函数

时间:2016-11-28 14:06:24

标签: scala

为了简单起见,我从我打算做的所有类型中删除了所有类型,并在此处使用了一个简单的列表。想象一下,我有一个带有两个参数的函数:一个集合和一个函数,并使用它来生成一个新的集合。

我知道!这看起来像重新发明地图,但实际的用例更加不同和复杂。到目前为止我尝试过的是:

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]"

的成员

感觉我好近,但无法弄清楚

1 个答案:

答案 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")