Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 隐式映射,或者类似的东西_Scala - Fatal编程技术网

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,我不希望它能遵循任何解决方案;)。尽管有一个是受欢迎的。