1.小试牛刀

使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的。

Ctrl+D可退出REPL shell

实验1:

scala> println("hello world")
hello world

scala> 5*7
res1: Int = 35

scala> 2* res1
res2: Int = 70

2.处理数据中的字面量、值、变量和类型

字面量:直接在源代码中出现的数据,如字母A数字3文本"Hello world"

值:不可变的有类型的存储单元,不允许重新赋值。val <name>:<type>=<literal>

变量:可变的 有类型的存储单元

类型:对数据的定义或分类

注意:Scala中一些变量或值不在使用由Java虚拟机的垃圾回收系统自动撤销其中的数据,不能手动撤销,也不需要这么做。

实验2:

2.1值的操作:

scala> val x: Int =5
x: Int = 5

scala> x
res0: Int = 5

scala> x*2
res1: Int = 10

scala> x/2
res3: Int = 2

scala> res0*res1
res4: Int = 50

------------------

scala> val greeting:String ="Hello world"
greeting: String = Hello world

scala> val atSysout='@'
atSysout: Char = @

错误的写法

scala> val x:Int="Hello"
<console>:11: error: type mismatch;
found : String("Hello")
required: Int
val x:Int="Hello"

2.2变量的操作:

Scala中的变量可以指定类型(如下)也可以不指定类型,Scala会根据使用的类型来推断变量正确的类型。

scala> var a:Double =2.72
a: Double = 2.72

scala> a=255.0/133/0
a: Double = Infinity

scala> a=5
a: Double = 5.0

scala> var b="string"
b: String = string

scala> b="opp"
b: String = opp

尽管可以重新赋值,但是不能赋值类型不兼容的情况

scala> var x=5
x: Int = 5

scala> x="string"
<console>:12: error: type mismatch;
found : String("string")
required: Int
x="string"

2.3 命名

scala采用驼峰命名法,首字母小写,后面一些列字母采用大写形式

#字母开头,后面可以使数字字母的组合,也可以使用下划线链接。

#反引号可以将任意不合法的字符做原样输出。

scala> val a.b=23
<console>:12: error: value b is not a member of Double
val a.b=23
^

scala> val `a.b`=4   #正确的方式
a.b: Int = 4

2.4 类型

scala的数值类型如下

Byte : 有符号的整数 1字节(大小)

Short:有符号的整数 2字节(大小)

Int:有符号的整数 4字节(大小)  如5

Long:有符号的整数 8字节(大小) 如5l,5L(大小写不区分)

Float:有符号的浮点数 4字节(大小) 如5f,5F(大小写不区分)

Double:有符号的浮点数 8字节(大小)  如5.0 默认为无修饰(前缀和后缀)的小数前面是Double类型

注:以0x前缀开头的是16进制表示

scala> val aInt=5
aInt: Int = 5

scala> val yellow=0xffff00
yellow: Int = 16776960

scala> val id=100L
id: Long = 100

scala> val pi=3.1415
pi: Double = 3.1415

scala支持不同等级的数值类型的转换,低等级可转化为高等级

如果高等级转化为低等级使用toType方法手动转化,所有类型都有这个方法

scala> val l:Long=20
l: Long = 20

scala> val i:Int =l
<console>:12: error: type mismatch;
found : Long
required: Int
val i:Int =l

scala> val i:Int=l.toInt
i: Int = 20

3.字符串

直接由双引号声明,可以添加转义字符,可采用+链接字符串,可使用==判断字符串值是否相等,使用三个双引号代表原样输出

scala> val hello="Hello you"

hello: String = Hello you

scala> val sinature="with regard,\n Your friends"
sinature: String =
with regard,
Your friends

scala> val greeting="Hello, "+"World"
greeting: String = Hello, World

scala> val matched=(greeting== "Hello, World")
matched: Boolean = true

scala> val theme="Na "*16+"Batman!"
theme: String = Na Na Na Na Na Na Na Na Na Na Na Na Na Na Na Na Batman!

scala> val greeting="""She was a good gril   
| she said "love you"
| "Why do that?",he said."""
greeting: String =
She was a good gril
she said "love you"
"Why do that?",he said.

字符串内插

scala> val approx=355/113f
approx: Float = 3.141593

scala> println("Pi,using 355/113,is about"+approx+".")
Pi,using 355/113,is about3.141593.

使用s前缀,使用$指示外部数据

scala> println(s"PI,using 355/113,is about $approx.")
PI,using 355/113,is about 3.141593.

scala> val item="apple"
item: String = apple

如果引用非字符,如算式,或者引用无法与周围的文本区分,就需要选用大括号,如下使用

scala> s"How do you like them ${item}s?"
res7: String = How do you like them apples?

scala> s"How do you like them $item?"
res8: String = How do you like them apple?

scala> s"Fish a chips,${"pepper "*3}salt"  //输出三次pepper
res10: String = Fish a chips,pepper pepper pepper salt

scala> f"I wrote a new $item%.3s today" //输出小数点后三位,如果是字母输出前三个
res12: String = I wrote a new app today

scala> f"Enjoy this $item ${355/113.0}%.5f tims today"//保留5位小数
res13: String = Enjoy this apple 3.14159 tims today

4.正则表达式

由字符和标点符号组成的一个字符串,表示一个搜索模式

Scala基于java类的jaba.utils.regex.Pattern,通过这个类的javadoc可了解

几个基本操作如下:

  matches

  replaceAll

  replaceFirst

语法:用正则表达式求值

val <Regex value>(<identifier>)=<input string>

实验:

scala> val input ="Enjoying this apple 3.14159 times today"   //给定的字符
input: String = Enjoying this apple 3.14159 times today

scala> val pattern=""".* apple ([\d.]+) times .*""".r   //捕获的是apple times之间的数字序列和一个点号
pattern: scala.util.matching.Regex = .* apple ([\d.]+) times .*

scala> val pattern(amountTest)=input   //独特的写法,将要匹配的字符串写在等号后面
amountTest: String = 3.14159

scala> val amount =amountTest.toDouble
amount: Double = 3.14159

正则表达式补充:

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
\ 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
{ 标记限定符表达式的开始。要匹配 {,请使用 \{。
| 指明两项之间的一个选择。要匹配 |,请使用 \|。

====================================================================================================

限定字符 6种 描述
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

====================================================================================================

字符 描述
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配。
\b 匹配一个字边界,即字与空格间的位置。
\B 非字边界匹配。

=====================================================================================================

5.Scala

Scala学习笔记(1)-基本类型归纳的更多相关文章

  1. scala 学习笔记七 基于类型的模式匹配

    1.介绍 Scala 提供了强大的模式匹配机制,应用也非常广泛. 一个模式匹配包含了一系列备选项,每个都开始于关键字 case.每个备选项都包含了一个模式及一到多个表达式.箭头符号 => 隔开了 ...

  2. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  3. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  4. java学习笔记01--数据类型

    java学习笔记01--数据类型 java数据类型划分 分为两大类型: 1)基本数据类型:类似于普通的值. 2)引用数据类型:传递的是内存的地址. 浮点类型实际上就是表示小数. java基本数据类型 ...

  5. Hadoop学习笔记—5.自定义类型处理手机上网日志

    转载自http://www.cnblogs.com/edisonchou/p/4288737.html Hadoop学习笔记—5.自定义类型处理手机上网日志 一.测试数据:手机上网日志 1.1 关于这 ...

  6. C#学习笔记之值类型与引用类型

    [TOC] C#学习笔记之值类型与引用类型 1.值类型与引用类型 1.1 深层区别 值类型与引用类型有不同的内存分布,这导致了不同的内存管理机制: 值类型由OS负责内存管理 引用类型由垃圾回收器(GC ...

  7. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

  8. Scala学习笔记(2)-类型注意

    Scala类型注意事项: 1.Any是绝对的根,所有的其他可实例化类型均有AnyVal和AnyRef派生. 2.所有AnyVal的类型成为值类型(所有数值类型.char.Booble和Unit) 3. ...

  9. [读书笔记]C#学习笔记三: C#类型详解..

    前言 这次分享的主要内容有五个, 分别是值类型和引用类型, 装箱与拆箱,常量与变量,运算符重载,static字段和static构造函数. 后期的分享会针对于C#2.0 3.0 4.0 等新特性进行. ...

随机推荐

  1. Visual Assist X 10.8.2042的Crack破解补丁. 2014.06.25 (General release.)

    VA小组时隔一个月又公布了新的版本号,这个版本号新添加了5个特性,修复了7-8个bug.而且也是稳定的Release版.所以这是很推荐更新的一个版本号. 对于破解补丁还是老规矩,请到我的下载空间下载, ...

  2. js中forEach,for in,for of的区别

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. ios开发之--条用第三方地图路线导航

    项目里面有位置功能,需要有导航,导航两种实现方式 (集成第三方SDK.URL跳转第三方应用) ,直接集成就不说,下面来说下通过url跳转, 最终效果如如下: 如果手机上安装的有客户端就展示,没有就不展 ...

  4. zabbix加入TCP连接数及状态的监控

    一 监控原理: [root@ nginx]# /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' TIME_WAI ...

  5. C语言的声明的优先级规则

    C语言的声明的优先级规则如下: A 声明从它的名字开始读取,然后按照优先级顺序依次读取 B 优先级从高到低依次是:   B.1 声明中被括号括起来的那一部分   B.2 后缀操作符[圆括号 ()表示这 ...

  6. 使用 requests 发送 GET 请求

    基本用法: import requests req = requests.get("http://www.baidu.com/") //发起GET请求 print(req.text ...

  7. Vim 手记:语法高亮

    本文覆盖范围: Vim 的着色方案 设置高亮 选择颜色 语法高亮除错 每个程序员的文本编辑器缺少了语法高亮.特殊关键字和短语着色,都是不完整的.语法高亮突出了文档的结构,帮助发现排字错误,利于调试,整 ...

  8. 【大数据系列】MapReduce详解

    MapReduce是hadoop中的一个计算框架,用来处理大数据.所谓大数据处理,即以价值为导向,对大数据加工,挖掘和优化等各种处理. MapReduce擅长处理大数据,这是由MapReduce的设计 ...

  9. 【大数据系列】Hadoop DataNode读写流程

    DataNode的写操作流程 DataNode的写操作流程可以分为两部分,第一部分是写操作之前的准备工作,包括与NameNode的通信等:第二部分是真正的写操作. 一.准备工作 1.首先,HDFS c ...

  10. JS方法 - 字符串处理函数封装汇总 (更新中...)

    一.计算一段字符串的字节长度 字符串的charCodeAt()方法, 可返回字符串固定位置的字符的Unicode编码,这个返回值是0-65535之间的整数,如果值<=255时为英文,反之为中文. ...