Scala:在Literal上输入声明

时间:2018-02-16 19:31:55

标签: scala

在光滑的"动态过滤器"例如,我在Scala中遇到过以前没见过的语法:

true:Rep [Boolean]

val q4 = coffees.filter { coffee =>
  List(
      criteriaColombian.map(coffee.name === _),
      criteriaEspresso.map(coffee.name === _),
      criteriaRoast.map(coffee.name === _) // not a condition as `criteriaRoast` evaluates to `None`
  ).collect({case Some(criteria)  => criteria}).reduceLeftOption(_ || _).getOrElse(true: Rep[Boolean])
}

所以我尝试过像:1: Int"s": String

它用于什么?要明确指定文字的类型?

1 个答案:

答案 0 :(得分:2)

这里:

(expression : Type)

称为类型归属。它用于确保您对代码中某些表达式的类型的假设是正确的,或者用于帮助编译器进行类型推断。

第三种用法是:强制隐式转换为指定的类型。

在咖啡方面,我不是专家,但唯一合理的解释是:

  • 范围
  • 中有一个类型构造函数Rep[X]
  • 在隐式范围内,存在带签名的隐式转换

-

implicit def booleanIsRep(b: Boolean): Rep[Boolean] = ...

或者,或者:

  • 在隐式范围内,存在带签名的多态转换

-

implicit def everythingCanWrapToRep[X](x: X): Rep[X] = ...

您可以尝试添加编译器选项-print以查看插入隐式转换的位置。