Scala匿名mixin?

时间:2018-07-04 15:39:00

标签: scala traits mixins

在调试时,我不得不检查 scala.collection.GenSetLike 文件。我在界面中遇到了这段代码:

trait GenSetLike[A, +Repr] 
extends GenIterableLike[A, Repr]
  with (A => Boolean)
  with Equals
  with Parallelizable[A, parallel.ParSet[A]] {
  ...
}

这种(A => Boolean)的混合意味着什么?我尝试使用各种关键字进行搜索,但找不到满意的结果。
这种语法表示一个带有A并返回布尔值的函数,但是我无法在trait mixin上下文中看到含义...

我的第一个猜测是与诸如 constructor apply之类的东西有关,但这只是一种直觉。

请教我!

2 个答案:

答案 0 :(得分:1)

A => BooleanFunction1特质的语法糖

Scala REPL

scala> def f[A] = (a: A) => true
f: [A]=> A => Boolean

上述lambda也可以写为

scala> def f[A]: Function1[A, Boolean] = (a: A) => true
f: [A]=> A => Boolean

答案 1 :(得分:1)

Scala中的

Set实现了覆盖Function1[A, Boolean]的{​​{1}}(A => Boolean)接口,与apply相同,因此Scala中的集合可用作函数。

contains

顺便说一下,这就是Set不变的原因。