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

文章目录

    • 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}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

The Power of Android Action Bars(转载)

转自&#xff1a;http://www.informit.com/articles/article.aspx?p1743642转载于:https://www.cnblogs.com/lance-ehf/p/4285239.html

计算机网络校园网简单设计与实现,简单校园网的设计与实现.docx

本科课程考查(论文)专用封面作业(论文)题目&#xff1a;所修课程名称&#xff1a;简单校园网的设计与实现 《计算机网络实践》修课程时间&#xff1a; 2012年 9月至 2012年 12月完成作业(论文)日期&#xff1a;2012年12月评阅成绩&#xff1a;评阅意见&#xff1a;评阅教师签名…

python面向对象继承

如果一个A类继承自另一个B类&#xff0c;就把这个A类称为B的子类&#xff0c;把B称为A的父类或者超类。继承可以使子类具有父类的各种属性和方法&#xff0c;而不再需要写相同的代码。在令子类继承父类的同时&#xff0c;可以重新定义某些属性和方法&#xff0c;使其获得与父类…

c++ class struct同名_C/C++面向对象编程之封装

点击“蓝字”关注我们吧前言&#xff1a;何为面向过程&#xff1a;面向过程&#xff0c;本质是“顺序&#xff0c;循环&#xff0c;分支” 面向过程开发&#xff0c;就像是总有人问你要后续的计划一样&#xff0c;下一步做什么&#xff0c;再下一步做什么&#xff0c;意外、事物…

LeetCode 1718. 构建字典序最大的可行序列(贪心+回溯)

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;请你找到满足下面条件的一个序列&#xff1a; 整数 1 在序列中只出现一次。2 到 n 之间每个整数都恰好出现两次。对于每个 2 到 n 之间的整数 i &#xff0c;两个 i 之间出现的距离恰好为 i 。 序列里面两个数 a[…

collections求和方法_java集合求和最大值最小值示例分享

package com.happyelements.athene.game.util;import static com.google.common.base.Preconditions.checkNotNull;import java.util.Collection;import com.google.common.collect.Lists;/*** Math工具类** version 1.0* since 1.0*/public class MathUtil {/*** see MathUtil…

为什么要给计算机配置IP地址,更改ip地址 为何要重启电脑

在系统中&#xff0c;如果想修改计算机的IP地址&#xff0c;系统会提示重新启动计算机&#xff0c;有没有什么办法不重启机器又照样改IP呢&#xff1f; 首先按自己的需要改动IP地址&#xff0c;点击[确定] 按钮后&#xff0c;系统会出现重新启动计算机的提示。此时点击[否]&…

static函数

// 以下摘自网络 静态函数在函数的返回类型前加上关键字static&#xff0c;函数就被定义成为静态函数。函数的定义和声明默认情况下是extern的&#xff0c;但静态函数只是在声明他的文件当中可见&#xff0c;不能被其他文件所用。定义静态函数的好处&#xff1a;<1> 其他…

python中数据类型转换原理_python的可变与不可变数据类型的原理是什么呢?

Python中变量的进阶知识&#xff1a; 涉及到Python的对象知识。 即&#xff1a;可变对象和不可变对象。题目中的可变和不可变数据类型&#xff0c;表述不准确。 Python中&#xff0c;一切皆对象。 对象是一种抽象。抽象是什么&#xff1f;抽象就是一种概念上的简化。 《learnin…

python股票历史最低点_Python统计某一只股票每天的开盘,收盘,最高,最低价格!...

模块&#xff1a;Numpy码字不易&#xff0c;转载请注明出处&#xff01;十分感谢&#xff01;准备工作&#xff1a;抓取某一只股票的信息&#xff0c;每30min为一组数据&#xff0c;可以参考上一篇&#xff1a;Note: 只为演示如何统计&#xff0c;更精准的可以抓取每5min为一组…

操作系统是计算机的什么管理者,操作系统是计算机资源的管理者

由计算机提供的、因应用程序的存在和运行所消耗或占用的物质条件&#xff0c;叫做计算机的资 源&#xff0c;例如处理器的时间、内存空间、外部设各等。为了有效地利用计算机的各种资源&#xff0c;操作系统 必须为用户承担起对计算机资源的管理任务。例如&#xff0c;为了使应…

python文件流读取二进制_Python使用web.py从POST请求中提取二进制文件

I am developing an API that allows outside clients to send a binary file which will be processed. my web.data() is a string and the function I am calling requires a binary. How do I get it into the correct format? Maybe I have the incorrect Headers? how …

LeetCode 1828. 统计一个圆中点的数目

文章目录1. 题目2. 解题1. 题目 给你一个数组 points &#xff0c;其中 points[i] [xi, yi] &#xff0c;表示第 i 个点在二维平面上的坐标。多个点可能会有 相同 的坐标。 同时给你一个数组 queries &#xff0c;其中 queries[j] [xj, yj, rj] &#xff0c;表示一个圆心在…

elasticsearch threadpool

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-threadpool.html转载于:https://www.cnblogs.com/SamuelSun/p/4287218.html

python argument list too long_[已解决]Argument list too long如何处理?

Argument list too long 本质是需要处理的长度超过系统的长度&#xff0c;因此无法执行相关命令。经过搜索发现了两种方法&#xff0c;思想都是将参数切分成小的段落进行执行。法一&#xff1a;通过xargs传递参数 (数据量大了还是不太奏效)find . -name "*.log" | xa…

计算机专业内存容量8g,内存容量8g和16g区别

语音内容&#xff1a;大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以计算机为例&#xff0c;内存容量8g和16g区别如下&#xff1a;1、16GB和8GB内存在同品牌、同芯片规格等情况下&#xff0c;仅存在容量大小区别&#xff0c;即1…

LeetCode 1829. 每个查询的最大异或值(前缀异或 + 位运算)

文章目录1. 题目2. 解题1. 题目 给你一个 有序 数组 nums &#xff0c;它由 n 个非负整数组成&#xff0c;同时给你一个整数 maximumBit 。你需要执行以下查询 n 次&#xff1a; 找到一个非负整数 k < 2^maximumBit &#xff0c;使得 nums[0] XOR nums[1] XOR ... XOR num…

python的运行环境_python-运行环境配置-1

Linux下安装Python3.6和第三方库 如果本机安装了python2&#xff0c;尽量不要管他&#xff0c;使用python3运行python脚本就好&#xff0c;因为可能有程序依赖目前的python2环境&#xff0c; 比如yum&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 不要动现有的…

[objective-c] 08 - 内存管理

OC语言中的内存管理机制为ARC(Automatic Reference Counting,自动引用计数)。于2011年中旬推出&#xff0c;替换陈旧且低效的手动内存管理&#xff0c;关于手动内存管理的内容&#xff0c;本章教程不再讲授。本章主要从以下几个方面对内存管理进行展开讲解。 内存管理原则对象引…

计算机主板最常见的问题,计算机主板功能 电脑实用技巧解决常见问题

电脑实用技巧解决常见问题1.解决问题 插电即开机问题现象&#xff1a;有些朋友有关机后断开电源板电源的习惯&#xff0c;可是却常常被一个问题困扰&#xff0c;就是电源板一通电&#xff0c;计算机就自动开机了&#xff0c;Power键形同虚设。解决问题&#xff1a;有些主板在BI…