我正在尝试编写一个函数,可以为参数中给出的函数添加上下文。
这个想法就在这里
object example {
def withOne(f : => T) = {
val a = 1 //some context
f
}
def foo() = withOne {
println(a)
}
}
我认为上下文可以隐式传递。 这个想法是没有周围函数f的约束内容,应该能够使用上下文。
现在,我认为这样做的唯一方法就是那样
object example {
def withOne(f : => Int => T) = {
val a = 1 //some context
f(a)
}
def foo() = withOne { a =>
println(a)
}
}
但这种宣称'a'女巫的力量对其他开发者来说并不明显:x
答案 0 :(得分:1)
我担心你无法解决这个问题,因为你无法将隐式注入函数。
在typelevel/scala
分叉中添加此功能需要proposal,但到目前为止似乎很难实现。
我的建议是使用正确的命名,这样您就不会对用户感到惊讶。例如,如果您提供的方法如下:
def withConnection[A](f: Connection => A): A = {
try {
val conn = ???
f(conn)
} finally {
conn.close()
}
}
我不会感到惊讶:
withConnection { implicit c =>
// db stuff
}