Scala 类型推断、操作符

类型推断


Scala可以自行推导表达式类型,所以不需要进行显式声明。

1 忽略类型
# 自动推导变量类型
val uio = "teset"

# 自动推导方法返回值类型
def fff(x:Int)=x * x

# 推导返回值类型失败(编译器无法推导递归定方法的返回值类型,需要显式声明)
def fac(n:Int) = if(n == 0) 1 else n * fac(n - 1)

# 推导泛型类类型参数
case class MyPair[A, B](x: A, y: B)
val p = MyPair(1, "scala")

# 推导多态方法类型参数
def id[T](x: T) = x
val q = id(1)  
2 参数

编译器从不推导方法参数类型,但是,在一些情况下,当函数被作为参数传入时,编译器会推导匿名函数参数类型。

Seq(1, 3, 4).map(x => x * 2)
3 何时不依赖类型推导

不依赖类型推导有助于提高公共API中公开成员类型的可读性。所以,尽量在向用户公开的APIs中显式使用类型。

有时推导会推导出极其特别的类型,比如Null。这将导致类型值无法再进行赋值。

# 推导出Null类型
var obj = null

操作符


Scala中,任何具有单个参数的方法都可以用作中缀运算符。

# 整数相加(方法形式)
10.+(1)
# 整数相加(中缀操作符形式)
10 + 1
1 定义使用操作符

任何合法标识符都可以用作操作符,包括名称(如add)或符号(如+)。

# 定义方法
class www(ccc:Int){
    def addOne(x:Int)= x + 1
}

# 使用操作符
val ii:www = new www(12)
ii addOne 12
2 优先

当表达式使用多个操作符时,操作符将会根据首字符的优先级进行计算。
优先级

翻译源:Scala Tour

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值