if (x > 0) 1
else -1
上述表示式的值是1或-1,具體是哪乙個取決於x的值。你可以將if/else的值賦值給變數:
val s = if (x > 0) 1
else -1
這與如下語句的效果一致:
if (x > 0) s = 1
else s = -1
以上兩個的區別在於:第乙個可以用來初始化val;第二種s必須是var。
val z = //結果z = x * y = 8
val name = readline("your name:")
print("your age:")
val age = readint()
scala中的使用迴圈有兩種選擇:
while (n > 0)
for(i
r = r * i
注:在for迴圈的變數之前並沒有val和var的指定。該變數的型別是集合的元素型別。迴圈變數的作用域一直持續到迴圈結束。
- 當for迴圈在遍歷字串和陣列時,需要使用until方法而不是to方法。to方法返回包含上限的閉區間,until方法返回乙個不包含上限的區間。如下遍歷字串的例子:
//方法一
val s = "hello"
var sum = 0
for(i
until s.length)
sum +=s(i)//方法二
var sum = 0
for(ch
**注:**scala不提供break或continue來退出迴圈,退出迴圈的方法如下:
1. 使用boolean型的控制變數。
2. 使用巢狀函式,從函式中return。
3. 使用breaks物件的break方法。
for(i
to3; j
to3) print((10 * i + j) + " ")
//將列印11 12 13 21 22 23 31 32 33
for(i
to3; j
if i != j) print((10 * i + j) + " ")
//將列印12 13 21 23 31 32
for(i
to10) yield i % 3
//生成 vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)
其中for推導式生成的集合與它的第乙個生成器是型別相容的。如下圖:
必須給定所有引數的型別,只要函式不是遞迴的,就不用指定返回型別。如果函式體需要多個表示式,可以使用**塊,塊中最後乙個表示式的值就是函式的返回值。
def decorate(str: string, left: string = "[", right:string = "]") = left + str + right
//呼叫函式如下
decorate("hello")//輸出 [hello]
decorate("hello", "%%%")//輸出 %%%hello]
decorate(left = "[", str = "hello", right = "]")//輸出 [hello]
decorate("hello",right = "****[")//輸出 [hello***]
decorate("<>>")//輸出 hello<<>>>
scala中如果函式體包含在花括號當中但沒有前面的=
號,那麼返回型別應該是unit。這樣的函式被稱作過程。
當val被宣告為lazy時,它的初始化將被推遲,直到首次使用時才取值。
參考文獻
【scala】scala的類層級
scala基礎 控制結構和函式
這兩周專案提測與上線,好久沒寫scala的筆記了 scala中幾乎構造的所有語法結構都有值 1 scala中if表示式也是有值的 2 塊中最後乙個達式的值就是該塊的值 3 scala中的unit等價於c c 語言中常用的void 4 scala中每個表示式都有乙個型別 5 if a 0 positi...
Scala學習筆記 控制結構和函式 2
7.函式 scala除了方法外還支援函式。方法對物件進行操作,函式不是。要定義函式,需要給出函式名 引數和函式體,例如 def abs x double if x 0 x else x 只要函式不是遞迴的,一般不需要指定返回型別。scala編譯器可以通過 符號右側的表示式的型別推斷出返回型別 如果函...
《快學scala》筆記及答案2
package com.zhuxiaoyu.chapter2 import scala.math.bigint object chapter2 將多個語句包含 如 val distance 在這個語句塊中最後一句的返回值作為distance的值。在函式定義中也是最後乙個語句作為函式的返回值,無需re...