我有以下Scala代码段:
type Set = Int => Boolean
def contains(s: Set, element:Int): Boolean = s(element)
def singletonSet(element: Int): Set = Set(element)
val oneElementSet = singletonSet(5)
contains(oneElementSet, 5) // true
contains(oneElementSet, 6) // false
我试图围绕它做什么:Set(element)。看起来它将替换元素代替Int参数,以产生这个:5 =>布尔。在任何地方都没有比较,那么为什么oneElementSet(5)返回true,而oneElementSet(6)返回false?
谢谢!
答案 0 :(得分:2)
Scala具有用于类型和值的单独命名空间。您的类型别名定义类型名称空间中Set
的内容,但singletonSet
Set
的定义来自值名称空间,实际上它是伴随对象scala.collection.immutable.Set
。 Set(element)
调用随播对象的apply
方法,该方法返回scala.collection.immutable.Set[Int]
,结果是Int => Boolean
的子类型,因此是Set
(您的类型别名)。