scala入门

2019-10-30  本文已影响0人  易水行2019
  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] 的子类
    • 下界 >:
    • <% 视图界定
    • : 上下文界定
    • 类型约束
      • =:=
      • <:<
      • <%<
    • 型变
      • +T
      • -T
上一篇下一篇

猜你喜欢

热点阅读