bar*_*ara 3 scala implicit-conversion
我想以这样的方式定义一个带隐式参数的函数:
// imports to add scope of A
{
implicit a: A => {
// some action
}
}.apply()
// somewhere in the code
class A
val a: A = new A
Run Code Online (Sandbox Code Playgroud)
但是我的Scala编译器没有编译它.它说:Cannot resolve reference apply with such signature.但是,参数是隐式的,所以我猜编译器应该在范围内查找并找到一个合适的对象.
这是真的吗?如果没有,那么我该如何解决呢?
你不能.只有方法可以有隐式参数.
当你这样做:
// val f: A => Unit =
{
implicit a: A => {
// some action
}
}
Run Code Online (Sandbox Code Playgroud)
你实际上是在声明一个类型的匿名函数,A => Unit并且你在函数体中声明了这个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()
}
Run Code Online (Sandbox Code Playgroud)
你会得到一个弃用警告,因为磁铁必须至少有一个参数我用过Unit,你应该称之为.apply(())避免它