關鍵字:
abstract case catch class def
do else extends false final
finally for if implicit import
match new null object override
package private protected requires return
sealed super this throw trait
try true type val var
while with yield
_ : = => <- <: <% >: # @
黃色是scala增加的 ,yield與java不同
Scala調用Java的方法時,會碰到有Scala的保存字,如Thread.yield()
這在Scala中是非法的,專門有個解決辦法,寫成: Thread.`yield`()
變量定義:
這些標識在Java中是非法的,在Scala中是合法的,可以當作函數名使用,使接口更加DSL:
val empty_? = true
val + = "hello"
val `yield` = 10
val ** = "power"
注意:可用但可讀性不好
賦值:
和Python1樣方便的賦值方式:
val x,y = 0 // 賦同1初始值
val (x,y) = (10, "hello") // 同時定義多個變量,注意:val x,y=10,"hello" 是毛病的
更花:
val x::y = List(1,2,3,4) // x = 1, y = List(2,3,4)
val List(a,b,c) = List(1,2,3) // a = 1, b = 2, c = 3
進1步花樣:
val Array(a, b, _, _, c @ _*) = Array(1, 2, 3, 4, 5, 6, 7) // 也能夠用List,Seq
a // 1
b // 2
c // Array(5, 6, 7), _*匹配0個到多個
基本類型:
Int, Long, Double, Byte, Short, Char, Float, Double, Boolean
編譯時Scala自動對應到Java原始類型,提高運行效力。Unit對應java的void
用 asInstanseOf[T]方法來強迫轉換類型:
def i = 10.asInstanceOf[Double] // i: Double = 10.0
List('A','B','C').map(c=>(c+32).asInstanceOf[Char]) // List('a','b','c')
用isInstanceOf[T]方法來判斷類型:
val b = 10.isInstanceOf[Int] // true
注意:無++,--操作,但可以+=, -=, 以下:
var i = 0
i++ // 報錯,無此操作
i+=1 // 1
i-- // 報錯,無此操作
i-=1 // 0
類型轉換:101".toInt // 101,無需 Integer.parseInt("101");
"3.14".toFloat // 3.14f
101.toString
3.14.toString
轉換全部列表:
List("1","2","3") map (_.toInt) // List(1,2,3)
或
List("1","2","3") map Integer.parseInt // List(1,2,3)
格式化:"my
name is %s, age is %d." format ("james",
30) // my name is james, age is 30.
注意:format還可以這么用
"%s-%d:%1$s is %2$d." format ("james", 30) // james⑶0:james is 30.
"%2$d age's man %1$s: %2$d" format ("james", 30) // 30 age's man james: 30
==和eqScala的==很智能,他知道對數值類型要調用Java中的==,ref類型要調用Java的equals()
在java中為false,在scala中為true
參考:http://blog.csdn.net/lyrebing/article/details/19835461