(1)基本语法

变量

val var(可变变量);

数据类型

Byte,Char,Int,Short,Long,String(字符),Float,Double,Boolean(true,flase)。

列子:

  1. val a = 3; or val a:Int = 3*//不可变,不能重新赋值
  2. 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. 1 to 5 *//Range(1,2,3,4,5) == 1.to(5)
  2. 1 until 5*//Range(1,2,3,4)
  3. 1 to 10 by 2*//以2为间隔生成Range。
  4. 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)

  1. val out = new PrintWrite("path/out.txt");
  2. for( i <- 1 to 5) out.println(i)//写入文件out.txt
  3. out.close

读取(import scala.io.Source)

  1. val readfile = Source.fromFile("out.txt")
  2. val lines = readfile.getLines//返回结果lines为迭代器
  3. for(line<- lines) println(line)

异常处理

例子:

  1. import java.io.FileReader
  2. import java.io.FileNotFoundException
  3. import java.io.IOException
  4. try{
  5. val f = new FileReader("path/out.txt")
  6. }
  7. catch{
  8. case ex: FileNotFoundException =>
  9. print("file not found:)
  10. case ex:IOException =>
  11. print("io error")
  12. } finally{
  13. file.close()
  14. }

控制语句(if,while,for)

  1. val x=3
  2. if(x>0){ ...} else if(x=3){...} else{...}*//if语句可以赋值给变量 val a = if(x=0) 1 else 0
  3. where(x>0){ x-=1;printf(...)}
  4. do{x+=1 println(i)}where(x<3)
  5. for(i<- 1 to 5) println(i)
  6. for(i<-1 to 5 if i%2==0) println(i)
  7. fro(i<-1 to 5 if i%2!=0;j<-1 to 10 if j!=i) println(i*j)*//多个生成器+守卫(if)
  8. 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)

  1. val strList = List("me","you","our")* //不可变列表 方法:head,tail
  2. val otherList = "they"::strList
  3. val List1 = 1::2::3::Nil == List(1,2,3)

集合(Set) 不重复元素

  1. var myset = Set("hadop","spark") *//var可变,库为不可变库
  2. myset+="Scala" *//添加元素
  3. *//导入可变包
  4. import scala.collection.mutable.Set
  5. val mySet = Set("a","b")*//val不可变,但Set可变
  6. mySet+="c"

映射(map)

  1. val mymap = Map("a"->1,"b"->2)*//键值对,键是唯一的,值不唯一
  2. print(mymap("a"))*//索引
  3. val c = if (mymap.contain("a")) mymap("a") else 0 *//contain判断键是否存在
  4. *//可变map (import scala.collection.mutable.Map)
  5. mymap("a") = 3* //更新
  6. mymap("c")= 4 *//添加新元素
  7. mymap+=("d"->5,"e"->6) *//add
  8. for((key,value)<-mymap) println(key,value) or for(key<-mymap.keys) print(key) or mymap.values(生成迭代器)

迭代器(Iteration)

  1. val iter = Iteration(1,2,3,4)
  2. while(iter.hasNext) { println(iter.next) } or for(elem<-iter) { printn(iter.next)}

方法:grouped,sliding返回迭代器

  1. val myList = List(1,2,3,4,5)
  2. val a = mylist grouped 3 //按照3分为两组,返回迭代器,a.next=List(1,2,3) a.next = List(4,5)
  3. val b = mylist sliding 3 //3个数滑动 b.next = List(1,2,3) .next = (2,3,4)....

数组(Array)*//(变长数组import scala.collection.mutable.ArrayBuffer)

  1. val myarray = new Array[Int](3) or val myarray = new Array(2,3,4)
  2. myarray(0) = 1 myarray(1)=2 myarray(2) = 3
  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 语法(一)的更多相关文章

  1. scala语法在spark withScope上的应用

    withSpout在spark中是用来做DAG可视化的,它在代码里的用法如下(以map为例,spark 2.0.0版本) def map[U: ClassTag](f: T => U): RDD ...

  2. scala语法解析(解码指环)

    看惯了JAVA的语法,再看scala的语法,有的晦涩难懂.正好遇到一个介绍scala语法的文章,就直接截图留念.省的再临时抱佛脚了.

  3. 1.scala语法

    对象的apply方法 (1)对象调用apply()方法,可省略成() (2)string对象的apply方法返回第n个字符 "hello"(4) //'o' if语句的返回值 ja ...

  4. Scala语法笔记

    JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法 JAVA与C++的?:操作符 等同于Scala的 if ( x &g ...

  5. Java和Scala语法比较

    类型推断 挑逗指数: 四星 我们知道,Scala一向以强大的类型推断闻名于世.很多时候,我们无须关心Scala类型推断系统的存在,因为很多时候它推断的结果跟直觉是一致的. Java在2016 年也新增 ...

  6. Spark记录-Scala语法基础

    参考:http://docs.scala-lang.org/cheatsheets/index.html.http://docs.scala-lang.org/.http://www.scala-la ...

  7. Scala 语法基础

    一 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性.Scala 运行在Java虚拟机上,并兼容现有的Java程序.Scal ...

  8. scala语法

    1:双重for循环(相当于j是i的内存循环):for (i <-0 to n; j <-10 to 20){ println(i);println(j)} 2:单层for循环:for (i ...

  9. Scala语法(二)

    (1)类,对象 //定义类(属性.方法),实例化对象 class counter{ *//主构造器 class counter(name:String,mode:Int){ ... } 实例化:val ...

随机推荐

  1. 把IDEA中新建的项目提交到Github仓库中

    对于一个没有进行任何版本控制设置的idea工程,使其支持Github,设置步骤如下 到Git官网下载Git的安装包,安装好以后,Git的安装目录下的文件结构应该如下图所示 在IDEA开发工具中配置Gi ...

  2. 【Leetcode】【Medium】Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  3. nginx转发配置

    nginx upstream backend19050 { server 10.10.10.10:19050 max_fails=3 fail_timeout=30s; } server { list ...

  4. htm5 手机自适应问题 文本框被激活(获取焦点)时,页面会放大至原来尺寸。

    加上这句话就ok啦 <meta name="viewport" content="width=device-width, initial-scale=1.0, mi ...

  5. List 的 removeAll 方法的效率

    List 的 removeAll 方法的效率低的原因: 要遍历source,对dest进行contain操作,而contain又要遍历dest进行equal比较. 解决办法:dest转为set,用se ...

  6. plus.webview.create mui.openWindow区别是什么呢

      create 只是创建这个webview,但是不显示,而且同一个页面.同一个id你甚至能重复创建多个(严重消耗性能,作死...),其实mui里面已经封装了这个方法 mui.preload(),并且 ...

  7. memcached 相关

    今天用了下memcached,把一个日志分析结果的大数组缓存起来,由于实时性跟准确性要求不高,所以缓存一周:因为日志越来越多,不缓存的话每次查看页面会比较慢.(其实可以先离线定期计算好结果存起来).以 ...

  8. 使用Android Studio和Gradle编译NDK项目之Experimental Plugin User Guide

    转载自:http://tools.android.com/tech-docs/new-build-system/gradle-experimental Introduction The new exp ...

  9. poj 3253 Fence Repair (STL优先队列)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/34805369 转载请注明出 ...

  10. UVa 1658 - Admiral(最小费用最大流 + 拆点)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...