[英]Scala: How to define anonymous function with implicit parameter?
我想以这样的方式定义一个带隐式参数的函数:
// imports to add scope of A
{
implicit a: A => {
// some action
}
}.apply()
// somewhere in the code
class A
val a: A = new A
但是我的Scala
编译器没有编译它。 它说: Cannot resolve reference apply with such signature
。 但是,参数是隐式的,所以我猜编译器应该在范围内查找并找到一个合适的对象。
这是真的吗? 如果没有,那么我该如何解决呢?
你不能。 只有方法可以有隐式参数。
当你这样做:
// val f: A => Unit =
{
implicit a: A => {
// some action
}
}
你实际上是在声明一个类型为A => Unit
的匿名函数,并且你在函数体中声明了a
隐含的参数a
您可以使用磁铁模式获得接近您想要的东西:
class A
case class Magnet()
object Magnet {
implicit def fromUnit(arg1: Unit)(implicit a: A) = Magnet()
}
object Test extends App {
implicit val a = new A
{
args: Magnet => {
//...
}
}.apply()
}
你会得到一个弃用警告,因为磁铁必须至少有一个参数而我使用了Unit
,你应该像.apply(())
一样调用它来避免它
正如Giovanni所说:你不能有这样的参数。
但是,您可以implicitly
使用来解决函数中的含义:
case class Foo(text : String)
implicit val foo = Foo("World")
(() => {
val implFoo : Foo = implicitly[Foo]
println(s"Hello ${implFoo.text}")
}).apply()
(但说实话,这听起来好像可以写得更好,而且你正在进行意大利面条代码领域与你正在做的事情。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.