如何标记隐含的匿名n-ary函数的参数?

时间:2017-04-19 20:19:28

标签: scala implicit

如何将匿名n-ary函数的参数标记为隐式?例如,请考虑以下事项:

def foo(f: (String, Int) => String): String = f("cat", 2)

def bar(s: String)(implicit i: Int): String = s * i

foo { implicit (s, i) =>
    bar(s)
}

最后一行无法编译,报告以下错误:

test_tuple_implicits.scala:7: error: expected start of definition
foo { implicit (s, i) =>
               ^
one error found

这对我来说很奇怪,因为我知道可以将参数标记为一元函数的隐含,例如使用Play web framework时:

Action { implicit request =>
  Ok("Got request [" + request + "]")
}

我也尝试过标记隐含foo { (implicit i, implicit s) =>的每个值而没有运气。搜索引擎也不是很有帮助,但我不确定我是否有合适的关键字。

编辑:我似乎可以通过编辑这样的定义来完成这项工作:

def foo(f: String => Int => String): String = f("cat")(1)

def bar(s: String)(implicit i: Int) =  s * i

foo { s => implicit i => 
    bar(s)
}

我想知道是否有一个更清晰的解决方案,特别是一种标记两个值的方法(如implicit a, b)。

0 个答案:

没有答案