我试图从链接中了解隐式函数类型 - http://www.scala-lang.org/blog/2016/12/07/implicit-function-types.html以下是示例代码作为示例。在下面的代码中,我们首先创建一个类 Transaction。
class Transaction {
private val log = scala.collection.mutable.ListBuffer.empty[String]
def println(s: String): Unit = log += s
private var aborted = false
private var committed = false
def abort(): Unit = { aborted = true }
def isAborted = aborted
def commit(): Unit =
if (!aborted && !committed) {
Console.println("******* log ********")
log.foreach(Console.println)
committed = true
}
}
接下来我定义了两个方法 f1 和 f2 如下所示
def f1(x: Int)(implicit thisTransaction: Transaction): Int = {
thisTransaction.println(s"first step: $x")
f2(x + 1)
}
def f2(x: Int)(implicit thisTransaction: Transaction): Int = {
thisTransaction.println(s"second step: $x")
x
}
然后定义一个方法来调用函数
def transaction[T](op: Transaction => T) = {
val trans: Transaction = new Transaction
op(trans)
trans.commit()
}
下面的 lambda 用于调用代码
transaction {
implicit thisTransaction =>
val res = f1(3)
println(if (thisTransaction.isAborted) "aborted" else s"result: $res")
}
我的问题是,如果我更改val trans: Transaction = new Transaction
为implicit val thisTransaction = new Transaction
并更改op(trans)
为op
它不起作用。
我无法理解为什么即使 Transaction 类型的 thisTransaction 存在于它没有被使用的范围内?