db withSession中涉及的scala概念{implicit session =>

时间:2018-05-06 08:55:13

标签: scala slick

我在scala工作。我经历了最高级的所有概念,如高阶函数,curried函数,宏等。但是在使用光滑的时候我并不理解这段代码片段。 db withSession { implicit session =>

我理解JdbcBackend.DatabaseDef正在调用withSession方法。所以在那之后我不知道该实现中发生了什么。请大家告诉我或者我需要知道与此实现相关的概念。 Tq

2 个答案:

答案 0 :(得分:1)

您似乎已经了解了这些概念。 withSession是在db上定义的函数,它将单个函数作为其参数,即高阶函数:https://docs.scala-lang.org/tutorials/tour/higher-order-functions.html.html

Scala将允许您在调用该函数时省略点,即Infix表示法:https://docs.scala-lang.org/style/method-invocation.html#infix-notation

大括号只是创建一个标准代码块,但是当您使用=>时,最终会得到一个定义函数的块,然后使用withSession作为单个参数传递给{{1}}中缀符号。

答案 1 :(得分:0)

withSession方法将业务逻辑与资源管理逻辑分开。 db.withSession为用户提供与数据库的连接,然后用户可以使用它,并且在withSession块的主体完成(正常或异常)之后,此连接将返回到连接池。< / p>

这种方法类似于java的tryWithResource习语。