我按照这里的建议来定义一个名为square的函数,然后尝试将它传递给一个名为square的函数.函数定义如下:
def square[T](n: T)(implicit numeric: Numeric[T]): T = numeric.times(n, n)
def twice[T](f: (T) => T, a: T): T = f(f(a))
Run Code Online (Sandbox Code Playgroud)
当调用两次(square,2)时,REPL会发出错误消息:
scala> twice(square, 2)
<console>:8: error: could not find implicit value for parameter numeric: Numeric[T]
twice(square, 2)
^
Run Code Online (Sandbox Code Playgroud)
任何人?
以下代码有效:
def bbb(v: Double => Unit)(a: Double): Unit = v(a)
bbb{v: Double => v == 0 }(5)
bbb{v: Double => Array(v) }(5)
Run Code Online (Sandbox Code Playgroud)
但是,如果我bbb按如下方式重载,那么除非我为第一个bbb调用手动分配类型签名,否则它将无法正常工作:
def bbb(v: Double => Unit)(a: Double): Unit = v(a)
def bbb(v: Double => Array[Double])(a: Double): Array[Double] = v(a)
bbb{v: Double => v == 0 }(5) // bbb{(v => v == 0):(Double => Unit)}(5)
bbb{v: Double => Array(v) }(5)
Run Code Online (Sandbox Code Playgroud) scala ×2