Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:文本的类型声明_Scala - Fatal编程技术网

Scala:文本的类型声明

Scala:文本的类型声明,scala,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 co

在光滑的“动态过滤器”示例中,我遇到了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])
}
因此,我在repl中尝试了类似于:
1:Int
“s”:String

它是用来干什么的?要明确指定文本的类型,请执行以下操作:

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

它还有第三个用途:强制对指定类型进行隐式转换

说到咖啡,我不是专家,但唯一合理的解释是:

  • 在作用域的某个地方有一个类型构造函数
    Rep[X]
  • 在隐式范围中,有一个带有签名的隐式转换
-

或者,或者:

  • 在隐式范围中,有一个带有签名的多态转换
-

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

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