【发布时间】:2013-09-03 19:54:19
【问题描述】:
在 Scala 中编程:全面的分步指南,第 2 版,第 546 页:
在 Iterable 下的继承层次结构中,您可以找到三个特征:Seq、 设置和映射。这三个特征的一个共同方面是它们都 用它的 apply 和 isDefinedAt 实现 PartialFunction trait 方法。
但是,此代码无法编译(尝试了 2.8.2 和 2.10.2):
Set(1, 2, 3).isDefinedAt(1)
有错误:
value isDefinedAt is not a member of scala.collection.immutable.Set[Int]
这是书中的错误吗?
【问题讨论】:
-
我的猜测是
isDefinedAt是一个测试元素是否存在于集合中,而Set的apply或contains代替了这项工作。我的意思是,Sets 通常(并非总是)几乎仅用于测试元素是否存在。 -
是的,这对我来说显然是拼写错误。
-
@cdshines -
isDefinedAt用于检查是否为给定的参数值定义了偏函数。见scala-lang.org/api/current/index.html#scala.PartialFunction -
@Lee,在作为存在测试的集合的上下文中,这不是很清楚吗?
-
@cdshines - 这不是存在测试,它返回是否为某些输入值定义了函数,而不是它会返回 true。如果你有类似
val f: PartialFunction[Int, Bool] = case { 1 => true }的东西,那么f(2)甚至都没有定义。在这种情况下,isDefinedAt(2)返回 false,而f(2)将抛出异常。
标签: scala