程序员人生 网站导航

Scala函数声明与定义

栏目:服务器时间:2015-04-15 08:51:38
语法:
Dcl ::= ?def? FunDcl
FunDcl ::= FunSig : Type
Def ::= ?def? FunDef
FunDef ::= FunSig [?:? Type] ?=? Expr
FunSig ::= id [FunTypeParamClause] ParamClauses
FunTypeParamClause ::= ?[? TypeParam {?,? TypeParam} ?]?
ParamClauses ::= {ParamClauses} [[nl] ?(? ?implicit? Params ?)?]
ParamClause ::= [nl] ?(? [Params] ?)?}
Params ::= Param {?,? Param}
Param ::= {Annotation} id [?:? ParamType]
ParamType ::= Type
| ?=>? Type
| Type ?*?
       函数声明具有这样的情势:def f psig: T,f是函数的名称,psig是参数签名,T是返回类型。函数定义def f psig: T = e还包括了函数体e,例如1个表达式定义了函数的结果。参数签名由1个可选的类型参数子句[tps],后跟零个或多个值参数子句(ps1)…(psn)构成。这样的声明或定义引入了1个值,该值具有1个(多是多态的)方法类型,其参数类型与返回类型已给出。
       已给出的函数体的类型被期望与函数声明的返回类型1致。如果函数定义不是递归的,那末返回类型则可省略,由于其可由函数体打包的类型推断出来。
       类型参数子句tps由1个或多个类型声明构成,在其中引入了可能具有边界的类型参数。类型参数的域包括全部签名,也包括任何类型参数边界和函数体(如果有的话)。
       值参数子句ps由零个或多个规范类型绑定(如x: T)构成,这些类型绑定绑定了值参数和将它们与它们的类型联系起来。1个规范值参数命名x的范围是函数体(如果有的话)。所有的类型参数名及值参数名必须两两不同。
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐