scala入门
2019-10-30 本文已影响0人
易水行2019
-
scala 没有break,continue 可用 scala.util.control.Breaks._ 中 break,不是好方法
breakable{ for(){ if() break; } }
-
变长参数
def test(args:Int*)={ for(arg<-args)println(arg) } test(1 to 5:_*) // _* 告诉编译器参数当参数序列处理
-
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
-
scaladoc
[B>:A] B只能是A的超类
-
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
-
class
主要构造器执行类体中所有语句 辅助构造器 this 必须先调用主构造器或其它构造器 @BeanProperty val name:String=_ 生成4个方法 类中字段自动带有getter,setter方法,比如age的age,age_= private[this] var a=0 //不生成set,get方法 不能用.a访问
-
object
apply 构造伴生类的新实例
-
package
-
继承
非抽象方法 一定要 override super 引用 超类与java一样 asInstanceOf[x] 类型检查 scala构造器中不能super(params)
-
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"))
-
-
trait
- 扩展用extends,重写不用写override
- with Cloneable 所有java接口都可作trait使用
- 可发扩展类
- 自身类型
- this:类型=> 只能混入 类型的子类
- this:{def getMessage():String}=> 只能混入拥有getMessage方法的类
-
操作符
- apply/update
- 提取器 :带unapply方法的对象
- unapplySeq方法 :提取任意长度的值的序列
-
高阶函数
- val fun = ceil _ // _ 表示 不要参数 ,将ceil 转成函数
- map,foreach,filter,reduceLeft
-
集合
- 扩展自Iterable
- LinkedHashSet保留插入顺序
- +加入无次序集合中,+:和:+ 向前或向后追加到序列;++ ,- --类似
- Seq,Set,Map
- IndexedSeq 可用下标访问,ArrayBuffer带,链表不带
- 都有apply方法
-
:: 构建stream
-
模式匹配
- case a xx u=> // case xx(a,u) 中置表示法
- case 中 rest @ _* 匹配值绑定到变量
-
xml
- NodeSeq
- RuleTransformer,RewirteRule
-
类型参数
- 上界 T<:Comparable[T] T 要是Comparable[T] 的子类
- 下界 >:
- <% 视图界定
- : 上下文界定
- 类型约束
- =:=
- <:<
- <%<
- 型变
- +T
- -T