Scala函数声明与定义


语法:
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,例如一个表达式定义了函数的结果。参数签名由一个可选的类型参数子句[tps],后跟零个或多个值参数子句(ps1)…(psn)构成。这样的声明或定义引入了一个值,该值具有一个(可能是多态的)方法类型,其参数类型与返回类型已给出。
       已给出的函数体的类型被期望与函数声明的返回类型一致。如果函数定义不是递归的,那么返回类型则可省略,因为其可由函数体打包的类型推断出来。
       类型参数子句tps由一个或多个类型声明构成,在其中引入了可能具有边界的类型参数。类型参数的域包括整个签名,也包括任何类型参数边界以及函数体(如果有的话)。
       值参数子句ps由零个或多个规范类型绑定(如x: T)构成,这些类型绑定绑定了值参数以及将它们与它们的类型联系起来。一个规范值参数命名x的范围是函数体(如果有的话)。所有的类型参数名及值参数名必须两两不同。

转载于:https://my.oschina.net/crxy/blog/398023

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值