有没有办法将隐式参数传递给curried函数。我正在使用脏修复(见下文),但它不漂亮。我希望能够将隐式var“i”作为隐式参数传递。
case class myLoaner() {
implicit val i = "How to get this val into scope within the session function"
def withCode[T](session: => T): Either[Exception, T] = {
try {
Right(session)
} catch {
case ex: Exception => {
Left(ex)
}
}
}
}
object Test {
def main(args: Array[String]) {
val r = myLoaner()
r.withCode {
implicit val imp = r.i // I want to get rid of this line of code and use the implict val defined above directly
val h = new Helper
h.run
}
}
class Helper {
def run(implicit i: String) {
println(i)
}
}
}
答案 0 :(得分:2)
在val r = myLoaner()
之后,您可以写
import r.i
或
import r._
做你想做的事。或者,您可以标记r
本身implicit
并提供此额外定义:
implicit def loanerString(implicit loaner: myLoaner): String = loaner.i
...但是现在有一点点暗示开始漂浮在我身上,所以明智地使用它。有时太多隐含的魔法会损害代码的可读性和可理解性。
答案 1 :(得分:0)
您始终可以直接传递隐式参数,例如为h.run(r.i)
。