Scala 语法(一)
(1)基本语法
变量
val var(可变变量);
数据类型
Byte,Char,Int,Short,Long,String(字符),Float,Double,Boolean(true,flase)。
列子:
val a = 3; or val a:Int = 3*//不可变,不能重新赋值
var b = 4.33; or var b:Double = 4.33 *//可变, 可赋值b = 3.9999;
字面量 :
5 + 6 ; == (5).+(6) //scala是纯面向对象语言,+为方法。3 max 5 //(基本数据类型福包装类包含更多运算方法)
自增自减(不能使用a++,a--):
需使用a+=1,a-=1等等
创建Range:
1 to 5 *//Range(1,2,3,4,5) == 1.to(5)
1 until 5*//Range(1,2,3,4)
1 to 10 by 2*//以2为间隔生成Range。
0.5f to 5.9f by 0.3f
输入输出
输入:(import scala.io.StdIn).readInt,readDouble,......
var i = readInt()*//输入整型即可
输出 print,println(输出换行),printf(格式化输出)
println(a), pirntf("output is %d,input is %.2f",a,b)
读写数据
写(import java.io.PrintWriter)
val out = new PrintWrite("path/out.txt");
for( i <- 1 to 5) out.println(i)//写入文件out.txt
out.close
读取(import scala.io.Source)
val readfile = Source.fromFile("out.txt")
val lines = readfile.getLines//返回结果lines为迭代器
for(line<- lines) println(line)
异常处理
例子:
import java.io.FileReader
import java.io.FileNotFoundException
import java.io.IOException
try{
val f = new FileReader("path/out.txt")
}
catch{
case ex: FileNotFoundException =>
print("file not found:)
case ex:IOException =>
print("io error")
} finally{
file.close()
}
控制语句(if,while,for)
val x=3
if(x>0){ ...} else if(x=3){...} else{...}*//if语句可以赋值给变量 val a = if(x=0) 1 else 0
where(x>0){ x-=1;printf(...)}
do{x+=1 println(i)}where(x<3)
for(i<- 1 to 5) println(i)
for(i<-1 to 5 if i%2==0) println(i)
fro(i<-1 to 5 if i%2!=0;j<-1 to 10 if j!=i) println(i*j)*//多个生成器+守卫(if)
val r = for(i<- 1 to 5 if i%2==0) yield {println(i);i} *//将for生成器生成的所有值收入集合r( Vector(2,4))
(2) 数据结构(容器collection)
*//import scala.collection,scala.collection.mutable(可变),scala.collection.immutable(不可变)默认
列表(List)
val strList = List("me","you","our")* //不可变列表 方法:head,tail
val otherList = "they"::strList
val List1 = 1::2::3::Nil == List(1,2,3)
集合(Set) 不重复元素
var myset = Set("hadop","spark") *//var可变,库为不可变库
myset+="Scala" *//添加元素
*//导入可变包
import scala.collection.mutable.Set
val mySet = Set("a","b")*//val不可变,但Set可变
mySet+="c"
映射(map)
val mymap = Map("a"->1,"b"->2)*//键值对,键是唯一的,值不唯一
print(mymap("a"))*//索引
val c = if (mymap.contain("a")) mymap("a") else 0 *//contain判断键是否存在
*//可变map (import scala.collection.mutable.Map)
mymap("a") = 3* //更新
mymap("c")= 4 *//添加新元素
mymap+=("d"->5,"e"->6) *//add
for((key,value)<-mymap) println(key,value) or for(key<-mymap.keys) print(key) or mymap.values(生成迭代器)
迭代器(Iteration)
val iter = Iteration(1,2,3,4)
while(iter.hasNext) { println(iter.next) } or for(elem<-iter) { printn(iter.next)}
方法:grouped,sliding返回迭代器
val myList = List(1,2,3,4,5)
val a = mylist grouped 3 //按照3分为两组,返回迭代器,a.next=List(1,2,3) a.next = List(4,5)
val b = mylist sliding 3 //3个数滑动 b.next = List(1,2,3) .next = (2,3,4)....
数组(Array)*//(变长数组import scala.collection.mutable.ArrayBuffer)
val myarray = new Array[Int](3) or val myarray = new Array(2,3,4)
myarray(0) = 1 myarray(1)=2 myarray(2) = 3
for(elem<-0 to 2) { println(myarray(elem)) }
多维数组 :val myarray = Array.ofDim[Int](3,4)
可变数组 :val myarray = ArrayBuffer(10,20,30) myarray+=40 *//方法 insert ,remove
元组(tuple)
*//数据类型可以不同
val mytuple = Tuple("a",1,3) println(mytuple._1) println(mytuple._2) * //索引
Scala 语法(一)的更多相关文章
- scala语法在spark withScope上的应用
withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...
- scala语法解析(解码指环)
看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.
- 1.scala语法
对象的apply方法 (1)对象调用apply()方法,可省略成() (2)string对象的apply方法返回第n个字符 "hello"(4) //'o' if语句的返回值 ja ...
- Scala语法笔记
JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法 JAVA与C++的?:操作符 等同于Scala的 if ( x &g ...
- Java和Scala语法比较
类型推断 挑逗指数: 四星 我们知道,Scala一向以强大的类型推断闻名于世.很多时候,我们无须关心Scala类型推断系统的存在,因为很多时候它推断的结果跟直觉是一致的. Java在2016 年也新增 ...
- Spark记录-Scala语法基础
参考:http://docs.scala-lang.org/cheatsheets/index.html.http://docs.scala-lang.org/.http://www.scala-la ...
- Scala 语法基础
一 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Java虚拟机上,并兼容现有的Java程序.Scal ...
- scala语法
1:双重for循环(相当于j是i的内存循环):for (i <-0 to n; j <-10 to 20){ println(i);println(j)} 2:单层for循环:for (i ...
- Scala语法(二)
(1)类,对象 //定义类(属性.方法),实例化对象 class counter{ *//主构造器 class counter(name:String,mode:Int){ ... } 实例化:val ...
随机推荐
- scp 上传和下载文件
mac和linux自带scp命令,windows的话请考虑gitbash或者专业linux工具 (默认端口为22,所以-p可不写) 上传文件 scp -p /home/lnmp.gz root@ip: ...
- Go语言 map遍历
1 遍历顺序 Go语言里的map,是不保证遍历顺序的(这一点很好理解).甚至同样内容的map,两次遍历的顺序,也可能不一样.下面是一个例子: m := map[string]int{"a1& ...
- Python学习---网络文件上传
中心思想: 传递过去文件的大小,根据文件的大小判断是否文件上传完成: 传递/接受文件采用分流的形式,每次传递/接受部分数据: 文件的读取均采用绝对路径实现,而且是bytes的形式读写 客户端: # ...
- gmock使用、原理及源码分析
1 初识gmock 1.1 什么是Mock 便捷的模拟对象的方法. 1.2 Google Mock概述 google mock是用来配合google test对C++项目 ...
- February 2 2017 Week 5 Thursday
Only do what your heart tells you. 随心而行. My heart tells me that I should leave here and go back to X ...
- U-Mail邮件群发:邮件营销最全建议
U-Mail专注于邮件营销平台研发工作多年了,服务企业数千家,拥有上万IP,在国内外基础设施建设上投资巨大,技术团队精湛.客服人员热情,赢 得了业界的好评和用户信任.有一些用户给我们发来邮件或来电咨询 ...
- C语言编译器,写给萌新们看看。
就我已经经历过的大学课程,仿佛每一门计算机的专业课程的开头,都是在介绍计算机发展的历史,和大名鼎鼎的冯诺依曼结构. 譬如C语言,比较水的计算机导论,c++,数据结构,计算机组成原理,甚至是Linux实 ...
- 关于Java中的反射的一个简单使用
把以前在其他地方的技术文章重新整理一遍, 方便自己回忆, 也方便他人借鉴. 刚工作的时候发过这么一段代码: package cn.com.hanbinit.test; import java.lang ...
- No module named _sqlite3
[root@lgj01 opsadmin]# python manage.py startapp accountTraceback (most recent call last): File &qu ...
- Hibernate多对多关联关系
今天遇到一个问题:有一个的类Reckoning,一个类AccountItem.这两个类之间的关系时多对多的关联关系. 一开始是由AccountItem来维护关联关系的,也就是Reckoning.hbm ...