《快學Scala》 控制結構和函式

2021-07-31 08:21:13 字數 2324 閱讀 3593

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...