美文网首页
scala快速入门

scala快速入门

作者: 安俊笔记 | 来源:发表于2019-10-31 16:20 被阅读0次
  1. scala 没有break,continue 可用 scala.util.control.Breaks._ 中 break,不是好方法

    breakable{
        for(){
        if() break;
        }
    }
    
  2. 变长参数

    def test(args:Int*)={
     for(arg<-args)println(arg)
    }
    test(1 to 5:_*)  // _* 告诉编译器参数当参数序列处理
    
  3. Array,ArrayBuffer

    val a=new Array[Int](10)
    a.toBuufer
    Array.ofDim[Double](3,4) //3行,4列
    Array("hello","world")
    val b=ArrayBuffer[Int]()
    b+=1
    b+=(1,2,3)
    b++=Array(8,3,5)
    insert/remove/trimEnd
    b.toArray
    for if yield <===> filter map
    与java转换 scala.collection.JavaConversions
    
  4. scaladoc

    [B>:A] B只能是A的超类
    
  5. map,tuple

    val scores=Map("a"->10,"b"->3)
    scala.collection.mutalbe.Map("a"->10,"b"->3)
    Map(("a",10),("b",3))
    取值
    scores("a")  //返回10
    scores.contains("a") //判断是否有key
    scores.getOrElse("a",0)
    scores.get("a") //返回Option对象
    更新
    scores("a")=3
    keySet,values
    toMap //对偶的集合转成map
    
  6. class

    主要构造器执行类体中所有语句
    辅助构造器 this 必须先调用主构造器或其它构造器
    @BeanProperty val name:String=_ 生成4个方法 
    类中字段自动带有getter,setter方法,比如age的age,age_=
    private[this] var a=0 //不生成set,get方法 不能用.a访问
    
    
  7. object

    apply 构造伴生类的新实例
    
  8. package

  9. 继承

    非抽象方法 一定要 override
    super 引用 超类与java一样
    asInstanceOf[x] 类型检查
    scala构造器中不能super(params) 
    
  10. file,Regex

    import scala.io.Source
    val source=Source.fromFile("a.txt","UTF-8")
    val iter=source.buffered //放回处理
    Source.fromFile().getLines.toArray
    Source.fromFile().mkString
    java的Printwriter写入文件
    Source.fromURL()
    Source.fromString("dfa")
    Source.stdin
    
    • 读取二进制文件

      val file=new File(fileName)
      val in=new FileInputStream(file)
      val bytes=new Array[Byte](file.length.toInt)
      in.read(bytes)
      in.close
      
    • 写入文件文件

      val out=new PrintWriter("a.txt")
      for(i<- 1 to 100) out.println(i)
      out.close()
      
    • 访问目录

          implicit def makeFileVisitor(f: (Path) => Unit) = new SimpleFileVisitor[Path] {
            override def visitFile(p: Path, attrs: attribute.BasicFileAttributes) = {
              f(p)
              FileVisitResult.CONTINUE
            }
          }
      
          Files.walkFileTree(file.toPath, (f: Path) => println(f))
      
    • 进程控制

      import sys.process._
      "ls -al .." !
      "ls -al .." #! "grep sec" !
      要把输出重定向到文件,使用撑#>操作符:
      "ls -al .." #> new File("output.txt") !
      要追加到文件末尾而不是从头覆盖的话,使用#>>操作符:
      "ls -al .." #>> new File ("output.txt") !
      要把某个文件的内容作为输入,使用#<操作符:
      "grep sec" #< new File("output.txt") !
      你还可以从URL重定向输入:
      "grep Scala" #< new URL( http://horstmann. com/index.html ) !
      
    • 正则

      val wsnumwsPattern = """\s+[0-9]+\s+""".r
      如果你想要从多个匹配项中提取分组内容,可以像这样使用for语句:
      for (numitemPattern (num,item) <- numitemPattern.findAllln("99 bottles, 98 bottles"))
      
  11. trait

    • 扩展用extends,重写不用写override
    • with Cloneable 所有java接口都可作trait使用
    • 可发扩展类
    • 自身类型
      • this:类型=> 只能混入 类型的子类
      • this:{def getMessage():String}=> 只能混入拥有getMessage方法的类
  12. 操作符

    • apply/update
    • 提取器 :带unapply方法的对象
    • unapplySeq方法 :提取任意长度的值的序列
  13. 高阶函数

    • val fun = ceil _ // _ 表示 不要参数 ,将ceil 转成函数
    • map,foreach,filter,reduceLeft
  14. 集合

    • 扩展自Iterable
    • LinkedHashSet保留插入顺序
    • +加入无次序集合中,+:和:+ 向前或向后追加到序列;++ ,- --类似
    • Seq,Set,Map
    • IndexedSeq 可用下标访问,ArrayBuffer带,链表不带
    • 都有apply方法
    • :: 构建stream

  15. 模式匹配

    • case a xx u=> // case xx(a,u) 中置表示法
    • case 中 rest @ _* 匹配值绑定到变量
  16. xml

    • NodeSeq
    • RuleTransformer,RewirteRule
  17. 类型参数

    • 上界 T<:Comparable[T] T 要是Comparable[T] 的子类
    • 下界 >:
    • a <% b 视图界定 : a 可以被隐式转换成b
    • [T : Ordering] 上下文界定 要存在一个Ordering[T]的隐式值
    • 类型约束
      • =:=
      • <:<
      • <%<
    • 型变
      • +T 协变 适于 输出类型参数 如不可变集合中元素
      • -T 逆变 适行输入类型参数 如 函数参数
  18. 高级类型

    • 类型投影 O#I

    • this.type 链式调用 返回类型 解决返回 this 是父类问题

    • Title.type 单例对象

    • type a=b 别名

    • 结构类型 def dothing(target:{ def do2(str:string):Any }) 任意有do2 的类都可调用dothing

    • 复合类型

    • 中置类型

    • 存在类型 forSome

    • 自身类型 this:Exception 只能被混入Exception的子类

    • 抽象类型

    • 高等类型

  19. 解析

  20. actor

  21. 隐式转换

    • 隐式转换函数:implicit 定义单参数的函数
    • 隐式参数:
  22. 定界延续

    • reset shift
    • @cps

相关文章

  • 从零开始学习Spark(二)Scala基础

    Scala基础 Spark的原生语言是Scala,因此入门一下Scala是学习Spark的第一步,下面就快速入门一...

  • scala快速入门

    scala 没有break,continue 可用 scala.util.control.Breaks._ 中 b...

  • spring boot+scala编写web接口

    本人是Java开发者,有面向对象的基础,而Scala也是面向对象的语言,学习后可快速入门。通过学习Scala的面向...

  • Scala学习笔记

    1 Scala入门 scala Hello World Scala变量 Scala变量 Scala字符串 Scal...

  • Scala快速入门系列

    写在前面的话 因为Spark是由Scala开发的,所以在开发Spark应用程序之前要对Scala语言学习。虽然Sp...

  • Scala快速入门(1)

    什么是Scala? Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Sc...

  • scala 编程快速入门

    Scala编程思想 作者布鲁斯 埃克尔(Bruce Eckel),也是Java编程思想的作者,本书是入门读本,和之...

  • Scala学习笔记(1)-快速起步

    本文是对Scala语言的一个基本介绍和快速入门,共包括如下章节: 概述 安装Scala 交互式命令行工具 文件方式...

  • 有趣的Scala

    First Steps to Scala,Scala 入门教程。 A Scala Tutorial,一篇面向 Ja...

  • Scala语言入门

    Scala语言入门——大纲

网友评论

      本文标题:scala快速入门

      本文链接:https://www.haomeiwen.com/subject/ttutbctx.html