• 快学Scala 第二课 (apply, if表达式,循环,函数的带名参数,可变长参数,异常)


    apply方法是Scala中十分常见的方法,你可以把这种用法当做是()操作符的重载形式。

    像以上这样伴生对象的apply方法是Scala中构建对象的常用手法,不再需要使用new。

     if 条件表达式的值就是跟在if或else之后的表达式的值,如果两者类型不同,选择各分支类型的公共超类型作为返回类型。

      if(x>1) 1 相当于 if(x>1) 1 else () 

    你可以把()当做是表示“无有用值”的占位符,将Unit当做Java的Void

    如果你在写较长的语句,需要分行来写的话, 要确保第一行以一个不能用做语句结尾的符号结尾。通常来说一个比较好的选择是操作符:

     "aa" + "bb" 

    + "cc" //这样解析器会报错

    "aa" + "bb" + 

    "cc" //这样才是正确的

    Scala表达式用{}, 最后一个表达式的值就是块的值。

    Scala循环while和for:

    val a = for (i <- 1 to 10)  { i }

    val b = for (i <- 1 until 10)  { i }

    Scala break:

    import scala.util.control.Breaks._
    
    object BreakDemo {
      def main(args: Array[String]): Unit = {
        breakable {
          for(i <- 1 to 10){
            break
          }
          
        }
      }
    }
    

    Scala for推导式,返回一个Vector集合

          //  Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
          val a = for (i <- 1 to 10) yield { i }
    

    Scala函数的带名参数

      def decorate(atr: String, left: String = "[", right: String = "]") = {
        left + atr +
          right
      }
    
    decorate("Hello", right = ">>>]")

    Scala变长参数

      def writeName(name: String*) = {
        for (n <- name) {
          println(n)
        }
      }
    
          val se = Array("aa", "bb", "cc")
          writeName(se: _*)
    

    当val被声明为lazy时,初始化被推迟,知道第一次取值的。

    Scala异常

    package com.citi.Lscala
    
    object FunDemo {
      def main(args: Array[String]): Unit = {
    
        try {
          //  Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
          val a = for (i <- 1 to 10) yield { i }
          println(a)
          println(decorate("Hello", ">>>]"))
          val b = -10
          println(checkValue(b).getClass())
          println(decorate("Hello", right = ">>>]"))
          println(1 to 5)
          val se = Array("aa", "bb", "cc")
          writeName(se: _*)
        } catch {
          case t: Throwable => t.printStackTrace()
          case _: Exception => println("Exception")
        } finally {
          println("do finally")
        }
    
      }
    
      def checkValue(x: Int) = {
        if(x>1) 1 else ()
      }
      
      def decorate(atr: String, left: String = "[", right: String = "]") = {
        left + atr +
          right
      }
    
      def writeName(name: String*) = {
        for (n <- name) {
          println(n)
        }
      }
    
    }
  • 相关阅读:
    Sql server 备份还原后出现“受限制用户”问题
    jQuery的deferred对象详解
    SQLServer 自增主键创建, 指定自增主键列值插入数据,插入主键
    无法添加来自此网站的应用 扩展程序
    C#中dynamic的正确用法
    C#编程总结(十四)dynamic
    基于params,ref,out的参数问题详解
    SQLServer 数据库查看死锁、堵塞的SQL语句
    如何对web.config进行加密和解密
    自定义HttpModule的一些经验--配置篇
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7255600.html
Copyright © 2020-2023  润新知