给出以下类型定义:
type Set = Int => Boolean
我可以声明一个返回Set两种方式的函数
def singletonSet(elem: Int): Set =
value => value == elem
或
def singletonSet(elem: Int): Set =
Set(elem)
第二个定义使用Scala标准库中的Set而不是声明的类型,但Scala如何隐式转换为声明的类型Set?隐式转换对我来说似乎很奇怪。
为了澄清第二个定义,我在以下有效代码中更改了该类型的名称:
type SetX = Int => Boolean
def singletonSet(elem: Int): SetX =
Set(elem)
答案 0 :(得分:7)
Set[A]
extends A => Boolean
,因此没有隐式转换,只是子类型。
答案 1 :(得分:0)
Set具有应用函数A =>布尔值,对于每个A,如果它存在于Set中则返回true;如果不存在则返回false(它调用' contains'函数)。例如:
val sx = Set(1,2,3)
sx(1) // true
sx(5) // false
在singletonSet中使用一个元素创建一个Set [Int]并返回" apply"功能。def singletonSet(elem: Int) = Set(elem).contains _