Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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_Functional Programming - Fatal编程技术网

在scala中实现函数的实现

在scala中实现函数的实现,scala,functional-programming,Scala,Functional Programming,我有一个函数 def foo[A](a1: A, a2: A): A = a1|+|a2 它需要实现 结果必须是: foo[Test](Test(1), Test(2)) // Test(3) 我在IDEA工作表中写了一些代码,但它不是编译的 case class Test(num: Int) object Test { implicit val test = new Writer[Test] { def write(v1: Test, v2: Test) = {

我有一个函数

def foo[A](a1: A, a2: A): A = a1|+|a2
它需要实现

结果必须是:

foo[Test](Test(1), Test(2)) // Test(3)
我在IDEA工作表中写了一些代码,但它不是编译的

case class Test(num: Int)

object Test {
  implicit val test = new Writer[Test] {
    def write(v1: Test, v2: Test) = {
      Test(v1.num + v2.num)
    }
  }
}

trait Writer[A] {
  def write(v1: A, v2: A): A
}


implicit class someT[A](a1: A) {

  def |+|(a2: A)(implicit writer: Writer[A]) = {
    writer.write(a1, a2)
  }
}

def foo[A](a1: A, a2: A): A = a1|+|a2

foo[Test](Test(1), Test(2))
输出错误为:

Error:(32, 34) could not find implicit value for parameter writer: A$A213.this.Writer[A]
def foo[A](a1: A, a2: A): A = a1|+|a2
                            ^
Error:(32, 34) not enough arguments for method |+|: (implicit writer: A$A213.this.Writer[A])A.
Unspecified value parameter writer.
def foo[A](a1: A, a2: A): A = a1|+|a2
                            ^

您缺少
foo
上所需的隐式
Writer[A]

def foo[A](a1: A, a2: A)(implicit writer: Writer[A])
或者,如果您更喜欢上下文边界:

def foo[A : Writer](a1: A, a2: A)
现在,编译器可以依次看到
+
的作用域中有一个
编写器[a]