什么是单例类型?它的应用是什么?它的含义是什么?例子多得是欢迎,外行术语更是欢迎!
nkhmeac61#
如果你认为一个类型是一组值,那么一个值x的单例类型就是只包含这个值({x})的类型。用法示例:1.模式匹配:case _: Foo.type使用eq检查匹配的对象是否与Foo相同,其中case Foo仅使用equals检查它是否等于Foo。1.需要写下object的类型(作为类型参数,参数等):
x
{x}
case _: Foo.type
eq
Foo
case Foo
equals
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。
new B.method1.method2
this.type
method1
A
eqoofvh92#
简单地说,单例类型是singleton object的类型。该对象成为该类型的唯一示例,并且该类型的目的是为该单个对象提供语言一致的语法和类型检查。原因是单例类型是如此具体,以至于类型推断对它们不起作用,因此,开发人员有责任为单例对象提供类型。换句话说,你应该在编译器期望单例对象的地方提供类型声明,因为编译器在这种情况下无法推断类型:
object X val x: X.type = X
字符串类型系统存在的主要原因是为了检查程序的正确性,因此任何类型构造(如X.type)都应该从这样的Angular 来看待。为了理解它们,问问自己“你应该如何指示编译器只接受X的值(并且只有一个这样的值)?”例如,在下面的片段中,除了使用X.type,还可以使用什么?
X.type
X
case class example(x: X.type)
型所以我们可以说它们是对语言类型系统的补充,使得采用OOP的singleton pattern变得如此容易:“Singleton对象有效地实现了Scala中的Singleton模式,而无需额外的努力。
2条答案
按热度按时间nkhmeac61#
如果你认为一个类型是一组值,那么一个值
x
的单例类型就是只包含这个值({x}
)的类型。用法示例:1.模式匹配:
case _: Foo.type
使用eq
检查匹配的对象是否与Foo
相同,其中case Foo
仅使用equals
检查它是否等于Foo
。1.需要写下
object
的类型(作为类型参数,参数等):字符串
1.为了保证方法的返回值是它被调用的对象(对于方法链很有用,例如from here):
型
现在可以调用
new B.method1.method2
了,没有this.type
就不能调用,因为method1
会返回A
。eqoofvh92#
简单地说,单例类型是singleton object的类型。该对象成为该类型的唯一示例,并且该类型的目的是为该单个对象提供语言一致的语法和类型检查。原因是单例类型是如此具体,以至于类型推断对它们不起作用,因此,开发人员有责任为单例对象提供类型。换句话说,你应该在编译器期望单例对象的地方提供类型声明,因为编译器在这种情况下无法推断类型:
字符串
类型系统存在的主要原因是为了检查程序的正确性,因此任何类型构造(如
X.type
)都应该从这样的Angular 来看待。为了理解它们,问问自己“你应该如何指示编译器只接受X
的值(并且只有一个这样的值)?”例如,在下面的片段中,除了使用X.type
,还可以使用什么?型
所以我们可以说它们是对语言类型系统的补充,使得采用OOP的singleton pattern变得如此容易:“Singleton对象有效地实现了Scala中的Singleton模式,而无需额外的努力。