自学内容网 自学内容网

scala类型

类型

语法: Type ::= InfixType „=>‟ Type | „(‟[„=>‟ Type] „)‟ „=>‟ Type | InfixType [ExistentialClause] ExistentialClause ::= „forSome‟ „{„ ExistentialDc { semi ExistentialDcl} „}‟ ExistentialDcl InfixType CompoundType AnnotType SimpleType TypeArgs Types ::= „type‟ TypeDcl | „val‟ ValDcl ::= CompoundType {id [nl] CompoundType} ::= AnnotType {„with‟ AnnotType}[Refinement] | Refinement ::= SimpleType {Annotation} ::= SimpleType TypeArgs | SimpleType „#‟ id | StableId | Path „.‟ „type‟ | „(„ Types [„,‟] „)‟ ::= „[„ Types „]‟ ::= Type {„,‟ Type} 一阶类型和类型构造器(用类型的参数构造类型)是有区别的。一阶类型的一个子集是 值类型,表示(一阶)值的集合。值类型可以是具体的或者抽象的。 每个具体的值类型可以用一个类类型来表示,比如指向某类1(§5.3) 的类型指示器 (§3.2.3),或者表示类型交集(可能会加一个修饰(§3.2.7)来限制其成员的类型)的复 合类型(§3.2.7)。类型参数(§4.4)和抽象类型绑定(§4.3)引入了抽象值类型。类型中 的括号用来建组。 非值类型描述了那些不是值(§3.3)的标识符的属性。例如,一个类型构造器 (§3.3.3)并不指明值的类型。然而,当一个类型构造器应用到正确的类型参数上时,就 会产生一个可能是值类型的一阶类型。 在Scala中,非值类型被间接表述。例:写下一个方法签名来描述一个方法类型,虽 然通过它可以得到对应的函数类型(§3.3.1),但是它本身并不是一个真正的类型。类型 构造器是另外一个例子,比如我们可以写 type Swap[m[_,_],a,b] = m[b,a],但是 并没有定义直接给出对应的匿名类型函数的语法。 1 我们假定对象和包都隐式地定义一个类(与对象或包同名,但是在用户程序中不可访问) 13


原文地址:https://blog.csdn.net/2402_87144407/article/details/144410104

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!