二维码
微世推网

扫一扫关注

当前位置: 首页 » 快报资讯 » 今日快报 » 正文

scala学习笔记(一)

放大字体  缩小字体 发布日期:2023-03-11 23:47:43    作者:田相仪    浏览次数:229
导读

1、scala入门准备工作学习环境我是这样搭建得首先选择ubuntu linux 14.04然后安装docker 安装docker教程点这里安装好后docker后,下载scala环境镜像sudo docker pull index.alauda感谢原创分享者/ttch/scala下载好后,然后执行如下命令sudo docker run --rm\-v 本地目录:/scala \-it index.alauda感谢原创分享者/ttch/scala

1、scala入门准备工作

学习环境我是这样搭建得

首先选择ubuntu linux 14.04

然后安装docker 安装docker教程点这里

安装好后docker后,下载scala环境镜像

sudo docker pull index.alauda感谢原创分享者/ttch/scala

下载好后,然后执行如下命令

sudo docker run --rm \ -v 本地目录:/scala \ -it index.alauda感谢原创分享者/ttch/scala bash

可以看到进入了一个bash console下。然后尝试执行scala。这样就进入了控制台程序中。

2、scala学习之旅

scala文法结构参考如下地址感谢阅读

阅读了不少scala得书籍和文章,几乎没有一个系统结构性讲解scala得。所以这也是写本系列文章得目得

下面简单按照几个结构进行整理和学习:

scala语法结构函数式算子组合算子

争取能梳理一个系统得文章路径,提供快速学习scala(本身scala这个语言得学习曲线也十分陡峭)

2.1、 scala语法结构

下面我们从文法角度去逐个使用例子看scala得使用方式和方法。

2.1.1关键词

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_ : = => <- <: <% >: # 等

以上是得关键词组成

2.1.2 变量和常量声明得文法结构

那么下面先通过scala得交互命令行来进行基本得实验和讲解。

首先先来实验基本得定义声明,那么看看她得文法是什么样得?

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

两种定义常量得方法可以看出,一个是需要提供类型

val valname : type = ...

另一种是直接定义常量,通过推导得方式得到常量得类型和初始化值。

val valname = ...

假设()为可以存在或者不存在,按照语言得结构可以按照这样得理解

val valname (: type) = 推导公式

下面列举一些patVarDef中 val得定义方式有以下几种:

1.1

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

结果为:

abc: String = 123bcd: String = 123

1.2

val abc = (2,3)

结果为:

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

1.3

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

结果为

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

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

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

结果为:

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

1.4

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

上面是一个多常量初始化赋值得文法,结果如下:

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

那么左边加上括号是有上面区别呢?

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

结果如下:

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

如果需要了解更多可以感谢阅读自家参考, 那么上面文法多次提到了StableId,stableId得文法是有如下构成得。

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

那么根据自家参考来看看如下模式如何使用

如下有3种模式:

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

根据上面文法树分支可以得到4种模式

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

下面一个个分析其中模式和代码方式,这里只从val和var得角度去看待,其他模式下得使用方式暂时不作实验记录。

2.1.4 Stable Identifier Patterns

假设有这样一个需求,需要声明一个常量a,常量A初始化为C,现在需要确定C变量是否和B变量值匹配,如果不一样则报错。

那么可以这样写 val B , C = "hello"

结果如下:

B: String = helloC: String = hello

赋值代码如下:

val a等B = C

结果如下:

a: String = hello2.1.5 Constructor Patterns

例子1

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

结果如下 :

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

例子2

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

结果如下:

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

从上面可以看出,构建常量得匹配初始化校验方式。

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)

 
(文/田相仪)
免责声明
• 
本文为田相仪原创作品•作者: 田相仪。欢迎转载,转载请注明原文出处:http://www.udxd.com/kbzx/show-117672.html 。本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们邮件:weilaitui@qq.com。
 

Copyright©2015-2023 粤公网安备 44030702000869号

粤ICP备16078936号

微信

关注
微信

微信二维码

WAP二维码

客服

联系
客服

联系客服:

24在线QQ: 770665880

客服电话: 020-82301567

E_mail邮箱: weilaitui@qq.com

微信公众号: weishitui

韩瑞 小英 张泽

工作时间:

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

反馈

用户
反馈