scala - 如何理解以下 scala 调用

标签 scala squeryl

我有一个很困惑的问题。我正在玩squeryl,使用时发现:

package models

import org.squeryl.{Schema, KeyedEntity}

object db extends Schema {
  val userTable = table[User]("User")

  on(userTable)(b => declare(
      b.email is(unique,indexed("idxEmailAddresses"))
      ))
}

我必须导入import org.squeryl.PrimitiveTypeMode._

但这对我来说没有意义。这里的 is 是在 org.squeryl.dsl.NonNumericalExpression 中定义的,但为什么我必须包含看似不相关的 import org.squeryl.PrimitiveTypeMode._

谢谢。

最佳答案

我同意 @sschaef 的观点,这是由于需要隐式转换造成的。当 API(如 squeryl)决定构建 DSL(领域特定语言)以便获得一种针对其 API 进行编码的漂亮方式时,将需要隐式转换。核心 API 可能采用某些类型的对象,直接在代码中实例化这些对象可能会很麻烦/丑陋。因此,他们将使用隐式转换来为您完成一些提升工作,并尽可能保持 DSL 的干净。如果您查看 PrimitiveTypeMode 对象的 Scaladoc,您可以看到其上定义的许多隐式定义。隐式转换(在拉皮条库中使用)将从一种类型“上转换”为另一种类型,以获得对拉皮条类的更多功能的访问权限。当代码是隐式的时,事情会显式地包含到最终编译的代码中。

http://squeryl.org/api/index.html#org.squeryl.PrimitiveTypeMode $

此外,我相信您正在寻找的隐式转换是:

导入org.squeryl.PrimitiveTypeMode.string2ScalarString

继承自org.squeryl.dsl.QueryDsl。

关于scala - 如何理解以下 scala 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242789/

相关文章:

xml - 如何使用 Scala 验证 XML 文件的模式?

json - read.json 仅读取 Spark 中的第一个对象

scala - 如何: Custom Field in Lift-Record-Squeryl

scala - 使用 Scala 案例类在 Squeryl 中定义模式

scala - 防止 Mixin 覆盖 equals 破坏 case class 相等

scala - 被 JVM 困住了,厌倦了 Java……去哪里?

java - Scala/Java - 未在指定目录内创建文件

playframework - 如何将 Scala Squeryl ORB 与 play 2.0 框架集成?

scala - 如何:Transaction Rollback in squeryl

scala - 在 Scala IDE 中使用 Akka