Scala 隐式映射,或者类似的东西
这是我到目前为止所拥有的。我想要实现的是使容器的行为与它们所包含的类型相似Scala 隐式映射,或者类似的东西,scala,Scala,这是我到目前为止所拥有的。我想要实现的是使容器的行为与它们所包含的类型相似 implicit def transformer[T, A](f: T => A) : List[T] => List[A] = t => t map f implicit def combiner[T, U, A](f: (T, U) => A) : (List[T], List[U]) => List[A] = (t ,
implicit def transformer[T, A](f: T => A)
: List[T] => List[A] =
t => t map f
implicit def combiner[T, U, A](f: (T, U) => A)
: (List[T], List[U]) => List[A] =
(t , u ) => t zip u map { x => f(x._1, x._2) }
val x = List(1, 2, 3)
val f: Int => Int = (_ + 1)
val fx = f(x) // fx = List(2,3,4)
val g: (Int, Int) => Int = (_ + _)
val gxx = g(x, x) // gxx = List(2,4,6)
现在,这就像我想要的函数一样。但我在方法上有问题。例如,这显然不起作用:
val double = x + x
这不起作用,因为+必须是List[Int]的方法,而它不是
我需要提取方法名,查看作用域中是否有具有该名称的函数可以应用于基础类型,然后使用隐式定义提升它
或者,也可以使用一个类型构造函数来完成,该构造函数可以在实例化时扫描底层类型,并定义正确的方法
这两种解决方案都相当丑陋,我甚至不确定它们是否可行。有没有其他方法可以实现我想要的,而不需要明确地编写所有方法 你看过吗?结合标准Java反射,这可能会解决您的问题。我不知道IDE的get中的内容辅助是否会被这一点弄糊涂,不过…看起来确实不错。至于IDE,我不希望它能遵循任何解决方案;)。尽管有一个是受欢迎的。