美文网首页
scala入门

scala入门

作者: 易水行2019 | 来源:发表于2019-10-30 18:00 被阅读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] 的子类
      • 下界 >:
      • <% 视图界定
      • : 上下文界定
      • 类型约束
        • =:=
        • <:<
        • <%<
      • 型变
        • +T
        • -T

    相关文章

      网友评论

          本文标题:scala入门

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