文章目录

  • 1. 类和对象
  • 2. Trait
  • 3. 模式匹配
  • 4. 正则
  • 5. 异常处理
  • 6. 提取器
  • 7. 文件 IO

学自 https://www.runoob.com/scala/scala-tutorial.html

1. 类和对象

object myClass {import java.io._class Point(xc : Int, yc : Int){var x : Int = xcvar y : Int = ycdef move(dx:Int, dy:Int): Unit ={x += dxy += dyprintln("x : " + x)println("y : " + y)}}// 继承,只能单继承class Piont3D( val xc : Int, val yc : Int,val zc : Int) extends Point(xc, yc){var z : Int = zcdef move(dx:Int, dy:Int, dz:Int): Unit ={x += dxy += dyz += dzprintln("x : " + x)println("y : " + y)println("z : " + z)}}def main(args: Array[String]) = {val p1 = new Point(10, 20)p1.move(2, 3)// x : 12// y : 23val p2 = new Piont3D(10, 30, 50)p2.move(1,2,3)// x : 11// y : 32// z : 53val fred = new Employeefred.name = "Fred"fred.salary = 50000println(fred) // myClass$Employee[name=Fred][salary=50000.0]}class Person {var name = ""override def toString = getClass.getName + "[name=" + name + "]"}class Employee extends Person {var salary = 0.0override def toString = super.toString + "[salary=" + salary + "]"}
}

2. Trait

 // Trait 特征, 很像 Java 的抽象类trait Equal {def isEqual(x : Any) : Booleandef isNotEqual(x : Any) : Boolean = !isEqual(x)}class Point2(xc : Int, yc : Int) extends Equal {var x : Int = xcvar y : Int = ycdef isEqual(obj : Any) = {obj.isInstanceOf[Point2] && obj.asInstanceOf[Point2].x == x}}

必须实现 没有实现的isEqual,或者 声明 Point2 为抽象类 abstract class Point2

     val p3 = new Point2(2, 3)val p4 = new Point2(2, 4)val p5 = new Point2(3, 3)println(p3.isNotEqual(p4)) // falseprintln(p3.isNotEqual(p5)) // trueprintln(p3.isNotEqual(2)) // true

3. 模式匹配

object myMatch {def main(args: Array[String]) ={println(matchTest(3)) // manyprintln(matchTest(2)) // twoprintln(matchTest(1)) // oneprintln(matchTest1("two")) // 2println(matchTest1("test")) // othersprintln(matchTest1(1)) // oneprintln(matchTest1(6)) // isInt, 顺序遇到符合的就退出,剩余的不匹配val alice = new Person("alice", 18)val bob = new Person("bob", 19)val michael = new Person("michael", 20)for(p <- List(alice, bob, michael)){p match {case Person("alice", 18) => println("hi, alice")case Person("bob", 19) => println("hi, bob")case Person(name, age) => println(name + " " + age)}}// hi, alice// hi, bob// michael 20}def matchTest(x : Int) : String = x match {case 1 => "one"case 2 => "two"case _ => "many" // 类似 default}def matchTest1(x : Any) : Any = x match {case 1 => "one"case "two" => 2case y : Int => "isInt" // 是不是 Int 类型case _ => "others"}// 样例类case class Person(name : String, age : Int)
}

4. 正则

     // 正则表达式import scala.util.matching.Regexval pat1 = "Scala".rval s = "Scala is scalable and cool"println(pat1 findFirstIn s) // Some(Scala)val pat2 = new Regex("(S|s)cala") // 首字母 S or sprintln((pat2 findAllIn s).mkString(" - ")) //使用分隔符连接所有匹配// Scala - scalaprintln(pat2 replaceFirstIn(s, "Java"))// Java is scalable and coolprintln(pat2 replaceAllIn(s, "Java"))// Java is Javable and cool

5. 异常处理

     // 异常处理import java.io.FileReaderimport java.io.FileNotFoundExceptionimport java.io.IOExceptiontry{val f = new FileReader("input.txt")}catch {case e : FileNotFoundException => {println("missing file!")}case e : IOException => {println("IO Exception")} // 一般把具体的异常写在前面,否则捕获了一个普遍的异常,后面的具体异常没有捕获}// missing file!finally { // 都会执行的部分println("finally step")} // finally step

6. 提取器

     // 提取器是一个带有unapply方法的对象def apply(user : String, domain : String) = {user + "@" + domain}def unapply(email : String) : Option[(String, String)] = {val parts = email split "@"if(parts.length == 2)Some(parts(0), parts(1))elseNone}println(apply("michael", "csdn.net")) // michael@csdn.netprintln(unapply("michael@csdn.net")) // Some((michael,csdn.net))println(unapply("michael csdn")) // None
object myExtractor {//提取器使用模式匹配def main(args : Array[String]) = {val x = myExtractor(5) // 自动调用applyprintln(x) // 10x match{ // 在提取器对象中使用 match 语句是,unapply 将自动执行case myExtractor(num) => println(x, num) // 自动调用 unapply (10,5)case _ => println("无法计算")}}def apply(x : Int) = {x*2}def unapply(z : Int) = {if(z%2 == 0)Some(z/2)elseNone}
}

7. 文件 IO

object MyIO {import java.io._def main(args: Array[String]): Unit = {// 写入文件val writer = new PrintWriter(new File(("test.txt")))writer.write("scala hah\nhello michael") // 产生文件 test.txt (内容scala hah...)writer.close()// 从屏幕获取输入val input = scala.io.StdIn.readLine()println(input) // 讲输入的内容打印出来// 从文件读取import scala.io.SourceSource.fromFile("test.txt").foreach{print}// scala hah// hello michael}
}

Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)相关推荐

  1. Scala入门到精通——第二十五节 提取器(Extractor)

    本节主要内容 apply与unapply方法 零变量或变量的模式匹配 提取器与序列模式 scala中的占位符使用总结 1. apply与unapply方法 apply方法我们已经非常熟悉了,它帮助我们 ...

  2. OpenCV每日函数 特征检测和描述模块(4) MSER类(最大稳定极值区域提取器)

    一.概述 计算图像MSER的基础类是cv::MSER.它是一个抽象接口,继承自cv::Feature2D类.事实上,OpenCV中的所有特征检测类都是从这个类继承的.cv::MSER类的实例可以通过c ...

  3. Scala入门到精通——第十四节 Case Class与模式匹配(一)

    本节主要内容 模式匹配入门 Case Class简介 Case Class进阶 1. 模式匹配入门 在Java语言中存在switch语句,例如: //下面的代码演示了java中switch语句的使用 ...

  4. Scala入门到精通——第十一节 Trait进阶

    本节主要内容 trait构造顺序 trait与类的比较 提前定义与懒加载 trait扩展类 self type 1 trait构造顺序 在前一讲当中我们提到,对于不存在具体实现及字段的trait,它最 ...

  5. 《快学Scala》第14章——模式匹配和样例类 学习笔记

    Scala有一个十分强大的模式匹配机制,可以应用在很多场合:switch语句.类型查询,以及"析构"(获取复杂表达式中的不同部分).除此之外,Scala还提供了样例类,对模式匹配进 ...

  6. Scala入门到精通——第十节 Scala类层次结构、Traits初步

    本节主要内容 Scala类层次结构总览 Scala中原生类型的实现方式解析 Nothing.Null类型解析 Traits简介 Traits几种不同使用方式 1 Scala类层次结构 Scala中的类 ...

  7. Python笔记_23_正则相关函数_类中的方法_装饰器_异常

    文章目录 正则相关函数 search 和 match split 切割 sub 替换 finditer 匹配字符串中相应内容,返回迭代器 compile 指定一个统一的匹配规则 正则表达式的修饰符 类 ...

  8. Scala入门到精通——第六节:类和对象(一)

    本节主要内容 1 类定义.创建对象 2 主构造器 3 辅助构造器 类定义.创建对象 //采用关键字class定义 class Person {//类成员必须初始化,否则会报错//这里定义的是一个公有成 ...

  9. scala入门-05继承类(extends)的使用

    2019独角兽企业重金招聘Python工程师标准>>> 在scala下的org.scala.clazz下创建ExtendsScala.scala 创建Person类 创建Studen ...

最新文章

  1. 别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?
  2. 在服务器无root权限手动安装texlive
  3. 中国工程院发布2021中国电子信息工程科技发展十四大趋势
  4. linux patches工具,patch工具入门
  5. pythonsparkpickle_Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令
  6. MongoDB 增删改查
  7. 【Python】用 Python 来实现PDF 的各种操作(附网站和操作指导)
  8. golang包math/rand使用示例
  9. laravel中的数据迁移表结构、字段类型、定义整理
  10. 计算机系统基础:设备管理知识笔记
  11. 如何做机器学习项目规划?一个事半功倍的checklist
  12. python项目结构图_python 项目目录结构设置
  13. Android Studio中导出数据库文件的方法总结
  14. mysql数据库巡检方案_美团 MySQL 数据库巡检系统的设计与应用
  15. Windows Server 2012 R2 官方原版镜像(转载)
  16. 易语言解析ip138.com的查询接口
  17. 浏览器调取摄像头人脸抓拍实现
  18. python答辩准备
  19. 小云路由器mysql地址_小云路由器助手
  20. java什么叫一致性,Java 中的相等性和一致性

热门文章

  1. mysql 自动分表_Mysql Event 自动分表
  2. 哈希表思路图解和代码实现
  3. python程序写诗_将Python诗歌与D结合起来
  4. 深度残差网络ResNet解析
  5. 使用命名空间、头文件和实现文件
  6. Linux: 系统配置 crond 和 crontab(有图有代码有真相!!!)
  7. python 比赛成绩预测_利用 Python 预测英雄联盟胜负,分析了 5 万多场比赛才得出的数据!值得,涨知识了!...
  8. 华为鸿蒙消费者,王成录谈鸿蒙挑战和华为消费者业务崛起
  9. moco-globalsettings
  10. vim学习笔记(3)眼花缭乱的Vim模式