一、變數
1、
三種變數修飾符
val 定義 immutable variable(不修改 常量)
var定義 immutable variable(可修改 變數)
lazy val (惰性賦值的常量):不直接算出結果,在系統第一次呼叫 lazy val 的時候計算結果
scala> val d = 12* 可以不顯示指定變數的型別,因為scala會自動進行類別指導d: int = 12
scala> val e = 20
e: int = 20
scala> lazy val f = d * e
f: int = scala> f*12
res41: int = 2880
scala> f
res42: int = 240
scala> val y:int = 202、函式與**塊**塊(block)**塊用於組織多個表示式,**塊自身也是個表示式,求得的值是最後乙個表示式的值。y: int = 20
scala> val x = "asd"
x: string = asd
**塊有兩種寫法:
1、表示式都寫在一行,表示式之間分號分割
2、表示式分行,表示式末尾不需要分毫 函式def functionname(param: paramtype):returntype =示例**如下:
3、if、for表示式
在scala裡面,if和for並不是語句,而是乙個表示式。 語句是可以單獨執行的、能夠產生實際效果的**;而表示式則是包含在語句中,根據某種條件計算出乙個值或得出某種結果,然後由語句去判斷和處理的**。
(1)if表示式
if(logical_exp) vala else valb
scala> if(true) 1 else 2if(a!=1) a 的時候返回值是(), 因為「a!=1」是false,且 if 表示式沒有else,所以返回值為空,scala裡面空是 unit,所以if表示式的返回值就是unit的文字量,就是乙個空括號(2)for comprehensionres44: int = 1
scala> if(false) 3 else 4
res45: int = 4
scala> val a = 1
a: int = 1
scala> if(a == 1) a
res46: anyval = 1
scala> if(a!= 1) a
res47: anyval = ()
scala> if(a!=1) "not one" else a
res48: any = 1
scala> if(a!=1) "not one"
res49: any = ()
println("正常的for遍歷:")示例**:for( s
println("\n帶有 filter 的for遍歷:")
for(
s if(s.length>4) // filter
) println("\n帶有 filter 的for遍歷:")
val result_for = for yield (s1) // generator new collection
for( item
for 迴圈中的 yield 會把當前的元素記下來,儲存在集合中,迴圈結束後將返回該集合。scala 中 for 迴圈是有返回值的。如果被迴圈的是 map,返回的就是 map,被迴圈的是 list,返回的就是 list,以此類推。
4、try與match表示式
(1)try表示式
try {}
catch {}
finally {}
try catch finallycase _ => 0, "_"是萬用字元,無論try中是什麼異常都會被catch到,並返回0。finally 是try{} catch{}之後執行的,無論表示式是否異常,都會執行finally。
(2)match與switch較為相似
exp match其中的 "case _" 就相當於switch中的 default。
val code = 35、求值策略scala中有兩種求值策略(evaluation strategy)val result_match = code match
1、 call by value - 對傳入引數先進行求值,只一次求值
2、call by name - 函式實參每次在函式體內被呼叫到時都會進行求值
scala 通常使用的時 call by value
如果函式形參型別以 「=>」 開頭,則會使用 call by name
def foo( asd: int) // call by value舉個例子:下面定義了test1、test2. test1是call by value; text2是call by name.def foo( asd: => int) // call by name
def text1(x: int, y: int): int = x*x例 1 :def text2(x: => int, y: => int): int = x*x
test1(3+4, 8)例 2 :test1(7, 8) //test1 是call by value,首先會先算出引數
7*749
test2(3+4, 8)
(3+4)*(3+4) // test2是 call by name, 直接把3+4傳入test2,表示式替換x變數
7*(3+4)
7*749
test1(7, 2*4)test1(7, 8) //test1 是call by value,首先會先算出引數 2*4,再對x、y進行賦值
7*749
test2(7, 2*4) // test2是 call by name, 直接把2*4傳入test2,表示式替換y變數
7*7 // 2*4 沒用到,所以一直不需要進行計算
49
scala基礎語法
一 變數定義 1 val 定義的變數值不可以修改 2 var 定義的變數值可以修改 二 一些變數型別 1 unit 表示不返回任何結果方法的結果型別,相當於void 2 null null 空引用 3 nothing 任何其他類的子型別 4 any 所有其他類的父類 5 anyref 所有引用類的基...
Scala基礎 2 基礎語法
val x 6 if x 0 elsevar i 9 while i 0 val x 0 do while i 5 for 變數 表示式 語句塊 for i 1 to 5 其中 變數 表示式 被稱為 生成器 generator for i 1 to 5 if i 2 0 for i 1 to 5 j...
Scala基礎語法三
1.方法的定義與呼叫 1 方法的定義與呼叫 def 方法名 引數 引數型別,方法返回值型別 當然上邊的方法定義的方式中有許多是可以省略的,例如 省略方法的返回值型別 注意 方法的返回值型別可以不寫,編譯器可以自動推斷出來,但是對於遞迴函式,必須指定返回 省略傳入方法中的引數 注意 如上圖中的例子所示...