我希望IMPLICIT args处于更高阶的函数,例如:
func(arg1){implicit(x,y)=> x * y}
但是编译器说:
错误:预期的定义开始 val a = func(“2”,“4”){implicit(x,y)=> ^
可运行的示例代码:
object Test extends App {
new Test().run
}
class Test {
def run = {
val a = func("2", "4") { (x, y) => // It's OK
x * y
}
println("a: " + a)
val b = gunc("2", "4") { implicit x => { implicit y => // It's OK
x * y
}}
println("b: " + b)
}
def func(x: String, y: String)(f: (Int, Int) => Int) = f(x.toInt, y.toInt)
def gunc(x: String, y: String)(g: Int => Int => Int) = g(x.toInt)(y.toInt)
def hunc(x: String, y: String)(h: Tuple2[Int, Int] => Int) = h((x.toInt, y.toInt))
}
[ADD COMMENT]
我想知道......
我们可以用一个arg声明为“隐含的x => ...”。
似乎没有办法声明两个隐含的args。
答案 0 :(得分:1)
尝试添加:
val c = hunc("2", "4") { implicit pair => pair._1 * pair._2 }
答案 1 :(得分:1)
当你说implicit y => y * 2
时,你不是
声明一个隐式参数但将该函数标记为隐式,
所以你要对此做出类比:
implicit val f1 = (y: Int) => y * 2
def func1(x: String, y: String)(f: Int => Int) = f(1)
func1("", "")(f1)
当你想用两个标记一个函数时 参数是隐含的你可以这样做:
implicit val f2 = (x: Int, y: Int) => y * 2
def func2(x: String, y: String)(f: (Int, Int) => Int) = f(1, 2)
func2("", "")(f2)
但你不能这样做:
func2("", "")(implicit (x, y) => x)
,在这种特殊情况下,我认为没有任何意义可以使用含义。
你也可以看到这个问题,也许你会找到一些有用的信息there