Scala匿名混血?

Scala匿名混血?,scala,traits,mixins,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]] { ... } 这是什么意思?我尝试用各种关键字搜索,但没有找到令人满意的内容。 这个语法表示一个

调试时,我必须检查scala.collection.GenSetLike文件。我在界面中遇到了以下代码:

trait GenSetLike[A, +Repr] 
extends GenIterableLike[A, Repr]
  with (A => Boolean)
  with Equals
  with Parallelizable[A, parallel.ParSet[A]] {
  ...
}
这是什么意思?我尝试用各种关键字搜索,但没有找到令人满意的内容。
这个语法表示一个函数接受一个a并返回一个布尔值,但我看不出trait mixin上下文中的含义

我的第一个猜测是,这与构造函数或
apply
之类的东西有关,但这只是一种直觉


请教我

A=>Boolean
Function1
trait的语法糖

Scala REPL 上述lambda也可以写成

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

Scala中的
Set
实现了
Function1[A,Boolean]
A=>Boolean
)接口重写
apply
,与
contains
相同,因此Scala中的集合可以用作函数

> val s = Set(1,2,3) 
s: Set[Int] = Set(1, 2, 3)

> s(2) 
res1: Boolean = true

> s.apply(3) 
res2: Boolean = true

> s(23) 
res3: Boolean = false

顺便说一句,这就是为什么集合是不变的。

它与
相同。。。使用函数1[A,布尔]…
。还要注意,用户定义的二进制类型构造函数也可以在中缀表示法中使用,例如
trait
> val s = Set(1,2,3) 
s: Set[Int] = Set(1, 2, 3)

> s(2) 
res1: Boolean = true

> s.apply(3) 
res2: Boolean = true

> s(23) 
res3: Boolean = false