scala 到底什么是单例类型?

1u4esq0p  于 6个月前  发布在  Scala
关注(0)|答案(2)|浏览(76)

什么是单例类型?它的应用是什么?它的含义是什么?
例子多得是欢迎,外行术语更是欢迎!

nkhmeac6

nkhmeac61#

如果你认为一个类型是一组值,那么一个值x的单例类型就是只包含这个值({x})的类型。用法示例:
1.模式匹配:case _: Foo.type使用eq检查匹配的对象是否与Foo相同,其中case Foo仅使用equals检查它是否等于Foo
1.需要写下object的类型(作为类型参数,参数等):

object A
def method(): A.type = A

字符串
1.为了保证方法的返回值是它被调用的对象(对于方法链很有用,例如from here):

class A { def method1: this.type = { ...; this } }
class B extends A { def method2: this.type = { ...; this } }


现在可以调用new B.method1.method2了,没有this.type就不能调用,因为method1会返回A

eqoofvh9

eqoofvh92#

简单地说,单例类型是singleton object的类型。该对象成为该类型的唯一示例,并且该类型的目的是为该单个对象提供语言一致的语法和类型检查。原因是单例类型是如此具体,以至于类型推断对它们不起作用,因此,开发人员有责任为单例对象提供类型。换句话说,你应该在编译器期望单例对象的地方提供类型声明,因为编译器在这种情况下无法推断类型:

object X
val x: X.type = X

字符串
类型系统存在的主要原因是为了检查程序的正确性,因此任何类型构造(如X.type)都应该从这样的Angular 来看待。为了理解它们,问问自己“你应该如何指示编译器只接受X的值(并且只有一个这样的值)?”例如,在下面的片段中,除了使用X.type,还可以使用什么?

case class example(x: X.type)


所以我们可以说它们是对语言类型系统的补充,使得采用OOP的singleton pattern变得如此容易:“Singleton对象有效地实现了Scala中的Singleton模式,而无需额外的努力。

相关问题