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 ...
随机推荐
- css display属性详解
css display属性在对css做layout设计时非常重要,它的值有以下几种: Value Description Play it inline Default value. Displays ...
- leetcode Ch2-Dynamic Programming [2014]
1. Triangle class Solution { public: int minimumTotal(vector<vector<int> > &triangle ...
- 【Leetcode】【Medium】Binary Tree Right Side View
Given a binary tree, imagine yourself standing on the right side of it, return the values of the nod ...
- UIButton的titleLabel
UIButton的titleLabel @property(nonatomic, readonly, retain) UILabel *titleLabel Description - 描述A vie ...
- Hadoop学习---Hadoop的MapReduce的原理
MapReduce的原理 MapReduce的原理 NameNode:存放文件的元数据信息 DataNode:存放文件的具体内容 ResourceManager:资源管理,管理内存.CPU等 Node ...
- Oracle 12c logminer测试
首先开启归档:SQL> archive log list Database log mode Archive ModeAutomatic archival ...
- 全文检索及ElasticSearch框架学习
1. 全文检索的通用步骤: 1.建库步骤: a 分词 b 倒排索引 : 关键词和记录Id的对应关系,1对多. 2.查询步骤: a 分词 b 查索引 c 取交集或并集 2. 产品使用全文 ...
- 理解Underscore中的uniq函数
uniq函数,是Underscore中的一个数组去重函数,给它传递一个数组,它将会返回该数组的去重副本. 1 ES6版本去重 在ES6版本中,引入了一个新的数据结构——set,这是一种类似数组的数据结 ...
- Codeforces Round #433 (Div. 2)【A、B、C、D题】
题目链接:Codeforces Round #433 (Div. 2) codeforces 854 A. Fraction[水] 题意:已知分子与分母的和,求分子小于分母的 最大的最简分数. #in ...
- 创建Spring工程的基本步骤
第一步:加入jar包 第二步:创建配置文件 -申明javabean 配置 <?xml version="1.0" encoding="UTF-8"?> ...