用于添加上下文的周围函数

时间:2014-11-13 09:56:56

标签: scala functional-programming

我正在尝试编写一个函数,可以为参数中给出的函数添加上下文。

这个想法就在这里

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

1 个答案:

答案 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
}