3

Programming in Scala: A Comprehensive Step-by-Step Guide, 2nd Edition, page 546:

In the inheritance hierarchy below Iterable you find three traits: Seq, Set, and Map. A common aspect of these three traits is that they all implement the PartialFunction trait with its apply and isDefinedAt methods.

However, this code does not compile (tried both 2.8.2 and 2.10.2):

Set(1, 2, 3).isDefinedAt(1)

With error:

value isDefinedAt is not a member of scala.collection.immutable.Set[Int]

Is this a mistake in the book?

4

2 に答える 2

1

数学では、部分関数X => Yは関数ですX' → Y。ここで、X' は X のサブセットです。Set を PartialFunction と呼ぶのは正しくありません。なぜなら、それは全関数であり、すべての要素で定義されるからです。

Set(1, 2, 3).isDefinedAt _それが意味をなさない理由です - それは常に等しいですtrue

前に述べたように、Set[T] extends T => Boolean で、apply メソッドは、要素が存在するかどうかにかかわらず、true または false になります。必要に応じて作成できます

trait NamedSet[T] extends Set[T] with PartialFunction[T,Boolean] {
   def isDefinedAt(x: T) = true
}

ご覧のとおり、意味がありません

于 2013-09-03T20:58:04.230 に答える