Scala 匿名混合?
Scala anonymous mixin?
调试时我不得不检查 scala.collection.GenSetLike 文件。我在界面中遇到了这一点代码:
trait GenSetLike[A, +Repr]
extends GenIterableLike[A, Repr]
with (A => Boolean)
with Equals
with Parallelizable[A, parallel.ParSet[A]] {
...
}
这个(A => Boolean)
mix 是什么意思?我试着用各种关键字搜索,但找不到令人满意的东西。
此语法指示 接受 A 的函数和 returns 布尔值 ,但我看不到 trait mixin 上下文中的含义...
我的第一个猜测是它与 constructor 或 apply
之类的东西有关,但这只是一种直觉。
请教教我!
A => Boolean
是 Function1
trait
的语法糖
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
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
顺便说一句,这就是 Set 不变的原因。
调试时我不得不检查 scala.collection.GenSetLike 文件。我在界面中遇到了这一点代码:
trait GenSetLike[A, +Repr]
extends GenIterableLike[A, Repr]
with (A => Boolean)
with Equals
with Parallelizable[A, parallel.ParSet[A]] {
...
}
这个(A => Boolean)
mix 是什么意思?我试着用各种关键字搜索,但找不到令人满意的东西。
此语法指示 接受 A 的函数和 returns 布尔值 ,但我看不到 trait mixin 上下文中的含义...
我的第一个猜测是它与 constructor 或 apply
之类的东西有关,但这只是一种直觉。
请教教我!
A => Boolean
是 Function1
trait
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
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
顺便说一句,这就是 Set 不变的原因。