日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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} }

總結

以上是生活随笔為你收集整理的Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。