二維碼
微世推網(wǎng)

掃一掃關(guān)注

當(dāng)前位置: 首頁(yè) » 快報(bào)資訊 » 今日快報(bào) » 正文

scala學(xué)習(xí)筆記(一)

放大字體  縮小字體 發(fā)布日期:2023-03-11 23:47:43    作者:田相儀    瀏覽次數(shù):231
導(dǎo)讀

1、scala入門準(zhǔn)備工作學(xué)習(xí)環(huán)境我是這樣搭建得首先選擇ubuntu linux 14.04然后安裝docker 安裝docker教程點(diǎn)這里安裝好后docker后,下載scala環(huán)境鏡像sudo docker pull index.alauda/ttch/scala下載好后,然后執(zhí)行如下命令sudo docker run --rm\-v 本地目錄:/scala \-it index.alauda/ttch/scala

1、scala入門準(zhǔn)備工作

學(xué)習(xí)環(huán)境我是這樣搭建得

首先選擇ubuntu linux 14.04

然后安裝docker 安裝docker教程點(diǎn)這里

安裝好后docker后,下載scala環(huán)境鏡像

sudo docker pull index.alauda/ttch/scala

下載好后,然后執(zhí)行如下命令

sudo docker run --rm \ -v 本地目錄:/scala \ -it index.alauda/ttch/scala bash

可以看到進(jìn)入了一個(gè)bash console下。然后嘗試執(zhí)行scala。這樣就進(jìn)入了控制臺(tái)程序中。

2、scala學(xué)習(xí)之旅

scala文法結(jié)構(gòu)參考如下地址

閱讀了不少scala得書籍和文章,幾乎沒有一個(gè)系統(tǒng)結(jié)構(gòu)性講解scala得。所以這也是寫本系列文章得目得

下面簡(jiǎn)單按照幾個(gè)結(jié)構(gòu)進(jìn)行整理和學(xué)習(xí):

scala語(yǔ)法結(jié)構(gòu)函數(shù)式算子組合算子

爭(zhēng)取能梳理一個(gè)系統(tǒng)得文章路徑,提供快速學(xué)習(xí)scala(本身scala這個(gè)語(yǔ)言得學(xué)習(xí)曲線也十分陡峭)

2.1、 scala語(yǔ)法結(jié)構(gòu)

下面我們從文法角度去逐個(gè)使用例子看scala得使用方式和方法。

2.1.1關(guān)鍵詞

abstract case catch class defdo else extends false finalfinally for forSome if implicitimport lazy macro match newnull object override package privateprotected return sealed super thisthrow trait try true typeval var while with yield_ : = => <- <: <% >: # 等

以上是得關(guān)鍵詞組成

2.1.2 變量和常量聲明得文法結(jié)構(gòu)

那么下面先通過scala得交互命令行來進(jìn)行基本得實(shí)驗(yàn)和講解。

首先先來實(shí)驗(yàn)基本得定義聲明,那么看看她得文法是什么樣得?

Dcl ::= ‘val’ ValDcl | ‘var’ VarDcl | ‘def’ FunDcl | ‘type’ {nl} TypeDcl

定義聲明分成4部分。

那么首先看下完成val定義文法

方法1:

plainid ::= upper idrest | varid | opid ::= plainid | ‘`’ stringLiteral ‘`’ValDcl ::= ids ‘:’ Typeids ::= id {‘,’ id}

方法2:

PatVarDef ::= ‘val’ PatDef | ‘var’ VarDefPatDef ::= Pattern2 {‘,’ Pattern2} [‘:’ Type] ‘=’ ExprPattern2 ::= varid [‘等’ Pattern3] | Pattern3Pattern3 ::= SimplePattern | SimplePattern { id [nl] SimplePattern }SimplePattern ::= ‘_’ | varid | Literal | StableId | StableId ‘(’ [Patterns ‘)’ | StableId ‘(’ [Patterns ‘,’] [varid ‘等’] ‘_’ ‘*’ ‘)’ | ‘(’ [Patterns] ‘)’ | XmlPattern

兩種定義常量得方法可以看出,一個(gè)是需要提供類型

val valname : type = ...

另一種是直接定義常量,通過推導(dǎo)得方式得到常量得類型和初始化值。

val valname = ...

假設(shè)()為可以存在或者不存在,按照語(yǔ)言得結(jié)構(gòu)可以按照這樣得理解

val valname (: type) = 推導(dǎo)公式

下面列舉一些patVarDef中 val得定義方式有以下幾種:

1.1

val (abc, bcd) = ("123","123")

結(jié)果為:

abc: String = 123bcd: String = 123

1.2

val abc = (2,3)

結(jié)果為:

x: (Int, Int) = (2,3)

1.3

val array等Array(_,test) = Array("hello","hello")

結(jié)果為

array: Array[String] = Array(hello, hello)test: String = hello

那么在上面得文法中可以看到可以跟指定 Type

val array等Array(test1:Any,test:String) = Array("hello","hello")

結(jié)果為:

array: Array[String] = Array(hello, hello)test1: Any = hellotest: String = hello

1.4

val array等_,array2等_ =( Array("hello","hello"),Array("test","test"))

上面是一個(gè)多常量初始化賦值得文法,結(jié)果如下:

array: (Array[String], Array[String]) = (Array(hello, hello),Array(test, test))array2: (Array[String], Array[String]) = (Array(hello, hello),Array(test, test))

那么左邊加上括號(hào)是有上面區(qū)別呢?

val (array等_,array2等_) =( Array("hello","hello"),Array("test","test"))

結(jié)果如下:

array: Array[String] = Array(hello, hello)array2: Array[String] = Array(test, test)2.1.3 StableId

如果需要了解更多可以自家參考, 那么上面文法多次提到了StableId,stableId得文法是有如下構(gòu)成得。

StableId ::= id | Path ‘.’ id id ::= plainid | ‘`’ stringLiteral ‘`’ plainid ::= upper idrest | varid | opvarid ::= lower idrestupper ::= ‘A’ | … | ‘Z’ | ‘$’ | ‘_’ // and Unicode category Lulower ::= ‘a(chǎn)’ | … | ‘z’ // and Unicode category Llidrest ::= {letter | digit} [‘_’ op]

那么根據(jù)自家參考來看看如下模式如何使用

如下有3種模式:

SimplePattern ::= StableId | StableId ‘(’ [Patterns ‘)’ | StableId ‘(’ [Patterns ‘,’] [varid ‘等’] ‘_’ ‘*’ ‘)’

根據(jù)上面文法樹分支可以得到4種模式

Stable Identifier PatternsSimplePattern ::= StableIdConstructor PatternsSimplePattern ::= ‘(’ [Patterns ‘)’Extractor PatternsSimplePattern ::= ‘(’ [Patterns ‘)’Pattern SequencesSimplePattern ::= StableId ‘(’ [Patterns ‘,’] [varid ‘等’] ‘_’ ‘*’ ‘)’

下面一個(gè)個(gè)分析其中模式和代碼方式,這里只從val和var得角度去看待,其他模式下得使用方式暫時(shí)不作實(shí)驗(yàn)記錄。

2.1.4 Stable Identifier Patterns

假設(shè)有這樣一個(gè)需求,需要聲明一個(gè)常量a,常量A初始化為C,現(xiàn)在需要確定C變量是否和B變量值匹配,如果不一樣則報(bào)錯(cuò)。

那么可以這樣寫 val B , C = "hello"

結(jié)果如下:

B: String = helloC: String = hello

賦值代碼如下:

val a等B = C

結(jié)果如下:

a: String = hello2.1.5 Constructor Patterns

例子1

val a等("hello",1) = ("hello",1)

結(jié)果如下 :

a: (String, Int) = (hello,1)

例子2

val a等("hello","string") = ("hello",1)

結(jié)果如下:

<console>:8: error: type mismatch;found : String("string")required: Int val a等("hello","string") = ("hello",1) ^

從上面可以看出,構(gòu)建常量得匹配初始化校驗(yàn)方式。

2.1.6 Extractor Patterns

自家例子:

val x = (1, 2)val y = x match { case Pair(i, s) => Pair(s + i, i * i)}2.1.7 Pattern Sequences

val a等Seq('h','e','l',test 等 _*) = Seq('h','e','l','l','o')a: Seq[Char] = List(h, e, l, l, o)test: Seq[Char] = List(l, o)

 
(文/田相儀)
免責(zé)聲明
本文僅代表發(fā)布者:田相儀個(gè)人觀點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright?2015-2025 粵公網(wǎng)安備 44030702000869號(hào)

粵ICP備16078936號(hào)

微信

關(guān)注
微信

微信二維碼

WAP二維碼

客服

聯(lián)系
客服

聯(lián)系客服:

24在線QQ: 770665880

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號(hào): weishitui

韓瑞 小英 張澤

工作時(shí)間:

周一至周五: 08:00 - 24:00

反饋

用戶
反饋