快学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)
    }
  }

}
原文地址:https://www.cnblogs.com/AK47Sonic/p/7255600.html