本站内容版权属于本人。转载须告知本人,写明出处,并在文首提供指向本站对应文章的链接。
本文链接:Scala学习(杂1)
本文链接:Scala学习(杂1)
简介
有一些内容不是很容易归类,篇幅也不够,但是是需要了解的部分,暂且放在这里。
标识符
除了关键字,运算符,数字,字符串和一些特殊符号,剩下的就是标识符,标识符构成了代码的重要部分。
Scala标识符可以由$
,_
,字母,数字,以及大部分的字符(包括中文字符)构成。
要点:
_
单独使用时不是标识符- 数字不能作为标识符开头
$
不建议使用在标识符中- 某些字符会被当做运算符处理,比如
→
,注意和->
区分
_
的作用
- 用在
match
语句里表示默认选择支 - 用在泛型里面代指某类型,比如
val a: Array[_ <: Int] = Array(1)
- 用来取代实际不需要用到的变量,比如
case Vec3(x, _, z) => println(x, z)
- 缩减lambda表达式,比如
l.map(x => x.toDouble)
可以简化为l.map(_.toDouble)
- 用于
import
语句中,代表任意类或者成员,比如import java.io._
==
和##
Scala中,==
实际上是Java的equals
方法,##
实际上是hashCode
方法。略有不同的是,这两个方法对Java的基本类型也有效。
所以==
运算符的表现和Java中不同,看下例:
1 2 |
val s = "d" println("asd" == "as" + s) // 输出true |
如果想要使用Java中的==
,可以使用eq
运算符:
1 2 |
val s = "d" println("asd" eq "as" + s) // 输出false |
格式化字符串
Scala提供了一个非常简便的语法糖来格式化字符串:
1 2 3 4 5 6 7 |
val a = 0 val b = 0.4 println(s"a=$a, b=$b") // 一般可以直接用$+变量名方式来访问,输出a=0, b=0.4 println(s"${a}a$b") // 若出现歧义,可以用大括号包起来,输出0a0.4 println(s"$a$$\text{\$\$}$$b") // 转义$,输出0$b println(f"$a") // 注意f和s的区别,输出0 println(f"$a%08x") // f可以使用%格式,输出00000000 |
从此以后就告别String.format
了。