如: 符號字面量 'x 是表達式 scala.Symbol("x") 的簡寫,符號字面量定義以下:
package scala final case class Symbol private (name: String) { override def toString: String = "'" + name }
val foo = """菜鳥教程 www.runoob.com www.w3cschool.cc www.runnoob.com 以上三個地址都能訪問"""
var VariableName : DataType [= Initial Value] 或 val VariableName : DataType [= Initial Value]
def functionName ([參數列表]) : [return type]
object Test { def main(args: Array[String]) { printInt(b=5, a=7); } def printInt( a:Int, b:Int ) = { println("Value of a : " + a ); println("Value of b : " + b ); } }
for( var x <- Range ){ statement(s); }
以上語法中,Range 能夠是一個數字區間表示 i ==to== j ,或者 i ==until== j。左箭頭 ==<-== 用於爲變量 x 賦值。html
i to j 包含j i until j 不包含j
object Test { def main(args: Array[String]) { var a = 0; var b = 0; // for 循環 for( a <- 1 to 3; b <- 1 to 3){ println( "Value of a: " + a ); println( "Value of b: " + b ); } } }
輸出結果:java
Value of a: 1 Value of b: 1 Value of a: 1 Value of b: 2 Value of a: 1 Value of b: 3 Value of a: 2 Value of b: 1 Value of a: 2 Value of b: 2 Value of a: 2 Value of b: 3 Value of a: 3 Value of b: 1 Value of a: 3 Value of b: 2 Value of a: 3 Value of b: 3
for( var x <- List ){ statement(s); }
實例:數組
object Test { def main(args: Array[String]) { var a = 0; val numList = List(1,2,3,4,5,6); // for 循環 for( a <- numList ){ println( "Value of a: " + a ); } } }
for( var x <- List if condition1; if condition2... ){ statement(s);
實例:閉包
object Test { def main(args: Array[String]) { var a = 0; val numList = List(1,2,3,4,5,6,7,8,9,10); // for 循環 for( a <- numList if a != 3; if a < 8 ){ println( "Value of a: " + a ); } } }
var retVal = for{ var x <- List if condition1; if condition2... }yield x
大括號用於保存變量和條件,retVal是變量,循環中的yield會把當前的元素記下來,保存在集合中,循環結束後將返回該集合。實例:併發
object Test { def main(args: Array[String]) { var a = 0; val numList = List(1,2,3,4,5,6,7,8,9,10); // for 循環 var retVal = for{ a <- numList if a != 3; if a < 8 }yield a // 輸出返回值 for( a <- retVal){ println( "Value of a: " + a ); } } }
執行結果:app
value of a: 1 value of a: 2 value of a: 4 value of a: 5 value of a: 6 value of a: 7
object Test { def main(args: Array[String]) { printStrings("Runoob", "Scala", "Python"); } def printStrings( args:String* ) = { var i : Int = 0; for( arg <- args ){ println("Arg value[" + i + "] = " + arg ); i = i + 1; } } }
執行結果爲:ide
Arg value[0] = Runoob Arg value[1] = Scala Arg value[2] = Python
import java.util.Date object Test { def main(args: Array[String]) { val date = new Date val logWithDateBound = log(date, _ : String) logWithDateBound("message1" ) Thread.sleep(1000) logWithDateBound("message2" ) Thread.sleep(1000) logWithDateBound("message3" ) } def log(date: Date, message: String) = { println(date + "----" + message) } }
輸出結果爲:函數
Mon Dec 02 12:53:56 CST 2013----message1 Mon Dec 02 12:53:56 CST 2013----message2 Mon Dec 02 12:53:56 CST 2013----message3
val f1 = m _
==在方法名稱m後面緊跟一個空格和下劃線告訴編譯器將方法m轉換成函數,而不是要調用這個方法。也能夠顯示地告訴編譯器須要將方法轉換成函數:==this
val f1:(Int) => Int = m
var factor = 3 val multiplier = (i:Int) => i * factor
這裏咱們引入的一個自由變量factor,這個變量定義在函數外面,這樣定義的函數變量multiplier成爲一個「閉包」,由於它引用到函數外面的定義的變量,定義這個函數的過程是將這個自由變量捕獲而構成一個封閉的函數。完整實例:url
object Test { def main(args: Array[String]) { println( "muliplier(1) value = " + multiplier(1) ) println( "muliplier(2) value = " + multiplier(2) ) } var factor = 3 val multiplier = (i:Int) => i * factor }
輸出結果:
muliplier(1) value = 3 muliplier(2) value = 6
一維數組建立
var z:Array[String] = new Array[String](3) 或 var z = new Array[String](3) 或 var z = Array("Runoob", "Baidu", "Google")
==引用第i元素,注意是(),而不是[]==
var myList = Array(1.9, 2.9, 3.4, 3.5) println(myList(i))
多維數組定義
var myMatrix = ofDim[Int](3,3)
初始化不可變Map:
// 空哈希表,鍵爲字符串,值爲整型 var A:Map[Char,Int] = Map() // Map 鍵值對演示 val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
添加key-value對,使用+號,以下:
A += ('I' -> 1) A += ('J' -> 5) A += ('K' -> 10) A += ('L' -> 100)
Map可使用++運算符或者Map.++()方法來鏈接兩個Map,==Map合併時會移除重複的key==.
val t = (1, 3.14, "Fred")
以上實例在元組中定義了三個元素,對應的類型分別爲[Int, Double, java.lang.String]。也可使用以上方式來定義:
val t = new Tuple3(1, 3.14, "Fred")
元組的實際類型取決於它的元素的類型,好比 (99, "runoob") 是 Tuple2[Int, String]。 ('u', 'r', "the", 1, 4, "me") 爲 Tuple6[Char, Char, String, Int, Int, String]。
val t = (4,3,2,1)
咱們可使用t._1訪問第一個元素,t._2訪問第二個元素;
// 雖然 Scala 能夠不定義變量的類型,不過爲了清楚些,我仍是 // 把他顯示的定義上了 val myMap: Map[String, String] = Map("key1" -> "value") val value1: Option[String] = myMap.get("key1") val value2: Option[String] = myMap.get("key2") println(value1) // Some("value1") println(value2) // None
單例對象實例:
/* 文件名:Marker.scala * author:菜鳥教程 * url:www.runoob.com */ // 私有構造方法 class Marker private(val color:String) { println("建立" + this) override def toString(): String = "顏色標記:"+ color } // 伴生對象,與類共享名字,能夠訪問類的私有屬性和方法 object Marker{ private val markers: Map[String, Marker] = Map( "red" -> new Marker("red"), "blue" -> new Marker("blue"), "green" -> new Marker("green") ) def apply(color:String) = { if(markers.contains(color)) markers(color) else null } def getMarker(color:String) = { if(markers.contains(color)) markers(color) else null } def main(args: Array[String]) { println(Marker("red")) // 單例函數調用,省略了.(點)符號 println(Marker getMarker "blue") } }