1.scala语法

  1. 对象的apply方法
    (1)对象调用apply()方法,可省略成()
    (2)string对象的apply方法返回第n个字符

    "hello"(4)  //‘o’
    
  2. if语句的返回值
    java把语句和表达式看做2个东西,语句执行动作,表达式返回值。eg:if语句没有返回值。而scala中,大部分的语法结构都有返回值。
    (1)if..else..语法结构的返回值 = if/else后面跟随的表达式的值

    scala> val s = if(1>0) 1 else -1
    res0: Int = 1
    
  3. for
    (1)scala中没有for(初始值;条件;更新变量)结构的循环
    (2)如需这样的循环,2种选择:while / for(i <- 1 to n)

    scala> for(i <- 1 to 5) print(i+",")
    1,2,3,4,5,
    

(3)scala的for由3部分组成:生成器,守卫,循环体
生成器:变量 <- 表达式
守卫:if语句
循环体:循环的逻辑,如果循环体以yield开始,则for的返回值时一个集合

```scala
for(i <- 1 to 2; j <- 1 to 3)
  print(i*j+",")   //1,2,3,2,4,6,
  
//带守卫的for
for(i <- 1 to 2; j <- 1 to 3 if j!=2)
  print(i*j+",")   //1,3,2,6
  
//yield构建集合
for(i <- 1 to 10)
  yield i % 3   //Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)
```
  1. 函数

    //1.默认参数
    def decorate(value:String,left:String="[",right:String="]"): String ={
      left + value + right
    }
    decorate("haha") //[haha]
    
    //2.可变参数
    def sum(args:Int*): Int ={
      var sum=0
      for(i <- args)
        sum += i
      sum
    }
    sum(1 to 5: _*)  //15q
    
  2. 懒值
    (1)懒值在第一次被调用时初始化,如果没被使用过,则不去初始化
    (2)每次访问懒值时,scala都会调用一个方法来以线程安全的方式检查该值是否被初始化

    val words = scala.io.Source.fromFile("/home/lj/aaa.txt")         //words被定义时赋值
    def words2 = scala.io.Source.fromFile("/home/lj/aaa.txt")        //每次使用words2时被调用
    lazy val words3 = scala.io.Source.fromFile("/home/lj/aaa.txt")   //懒值在首次使用时初始化
    
  3. 异常处理
    scala没有受检异常---不需要声明函数或方法抛出某种异常。try代码快返回Nothing类型

      var in = new URL("http://www.baidu.com").openStream()
      try{
        //TODO 
      }finally {
        in.close()
      }
    
原文地址:https://www.cnblogs.com/72808ljup/p/5417683.html