Scala 入门1(变量、分支循环、函数)

2021-09-06 10:46:53 浏览数 (1)

文章目录

    • 1. var 变量,val常量
    • 2. 分支、循环
    • 3. 函数、方法
    • 4. 闭包

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

1. var 变量,val常量

scala 语句 用 ; 或者 n 分句

代码语言:javascript复制
object HelloWorld { // 类名跟文件名一致
    def main(args: Array[String]):Unit = { // Unit 相当于 void
        println("Hello World!")
        var myVar : String = "Foo"
        val myVal : String = "Too"
        myVar = "hello"
        // myVal = "world" // val 相当于常量,不能再次赋值
        val a, b, c = 100 // 不能分别赋值
        println(a,b,c) //(100,100,100)
        var pa = (40, "foo")
        println(pa) // (40,foo)

2. 分支、循环

  • 跟 java、 c 很像
代码语言:javascript复制
        if(a < 200)
            println("a < 200")
        else if(a == 200)
            println("a == 200")
        else
            println("a > 200")

        var n = 10
        while(n > 0){
            println(n)
            n -= 1
        }
        
        n = -1
        do{
            println(n)
            n -= 1
        }while(n > 0)

        for(x <- 1 to 10){
            println(x) // 包含结束的数
        }
        for(x <- 1 to 3; y <- 1 to 3){
            println(x, y) // 双重循环
        }
        var numList = List(100,2,3,4,5)
        for(a <- numList){
            println(a)
        }
        // 过滤元素
        for(a <- numList if a < 5; if a != 3){
            println(a)
        }
        // for yield : for 的返回值作为变量存储
        var returnVal = for{a <- numList if a < 5; if a != 3} yield a
        for(a <- returnVal)
            println(a)
  • 特有的 break 方式 Breaks.breakable{}
代码语言:javascript复制
        import scala.util.control._
        val loop = new Breaks
        loop.breakable{
            for(a <- numList){
                println(a)
                if(a == 3)
                    loop.break
            }
        }
        println("after break")

3. 函数、方法

代码语言:javascript复制
        // val 定义函数, def 定义方法
        class Test{
            def method(x:Int) = x   3 // 多行语句,可用 = {。。。}

            val func = (x:Int) => x   3
        }
        var obj = new Test()
        println(obj.method(2)) // 5
        println(obj.func(2)) // 5

        // 可变参数
        def printString(s : String*) = {
            for(si <- s)
                println(si)
        }
        printString("hello","michael","scala");

        //指定参数,默认参数
        def addInt(a:Int, b:Int=2, c:Int=3) : Int = {
            var sum = 0
            sum = a b c
            println(a,b,c)
            return sum
        }
        println(addInt(1)) // 6

        // 匿名函数
        var mul = (x:Int, y:Int) => x*y
        println(mul(3,4))
        var userDir = () => {System.getProperty("user.dir")}
        println(userDir())

        // 偏应用函数是一种表达式,你不需要提供函数需要的所有参数
        // 只需要提供部分,或不提供所需参数
        import java.util.Date
        def log(date : Date, message : String) = {
            println(date   "-----"   message)
        }
        val date = new Date
        val logWithDateBound = log(date, _ : String)
        logWithDateBound("message1")
        Thread.sleep(1000)
        logWithDateBound("message2")
        Thread.sleep(1000)
        logWithDateBound("message3")

4. 闭包

代码语言:javascript复制
        // 闭包
        var factor = 3
        val multi = (i : Int) => i*factor
        println(multi(5)) // 15
        factor = 2
        println(multi(5)) // 10
    }
}

0 人点赞