推荐一本书 scala编程语言,有电子版,比较厚。

包(package com.xx.data)

  1. 支持嵌套,下层可以访问上层作用域中的名称

  2. 可串联

  3. 顶部标记

  4. 包对象

  5. 包可见性

  6. 包在任何地方都可以引入,作用域至该语句所在块的末尾

  7. 重命名引入成员(xx=>yy)

  8. 隐藏方法(xx=>_)

  9. 自动引入(java.lang._ scala._ Predef.)



/**
 * play
 *支持嵌套,下层可以访问上层作用域中的名称
 * package com.chinahadoop{
 *
 *  package  spark{
 * }
 * 顶部标记
 * package b
 * 包对象 
 * 包可见性
 * 重命名引入成员
 * import java.util.{hashMap => JavaHashMap}
 * 隐藏方法 访问不了它了
 * hashMap=>_
 * 自动引入 
 * java.lang._ scala._ Predef._
 * _下划线你可以看作一个*星号
 * 可以放到任何一个包中,非常灵活
 * package aa.bb.cc.dd
 * class xxx{
 * private[dd] adadad= {
 * 
 * }
 * }
 *  }
 */



模式匹配

    标准用法(match)

    使用守卫

    匹配类型



package cn.chinahadoop.scala
class Basic5 {
}
object Basic5 extends App {
  val value = 1
  //match是有返回值的
  val result = value match {
    case 1 => "one"
    case 2 => "two"
    case _ => "some other number"
  }
  println("result of match  is :" + result)
}

结果为:

result of match  is :one

scala只要判断符合就不会继续往下执行,并不需要break或return。

package cn.chinahadoop.scala
class Basic5 {
}
object Basic5 extends App {
  val value = 3
  //match是有返回值的
  val result = value match {
    case 1 => "one"
    case 2 => "two"
    case _ => "some other number"
  }
  println("result of match  is :" + result)
}

结果为:

result of match  is :some other number

_代表通配符。

package cn.chinahadoop.scala
class Basic5 {
}
object Basic5 extends App {
  //  val value = 3
  //  //match是有返回值的
  //  val result = value match {
  //    case 1 => "one"
  //    case 2 => "two"
  //    case _ => "some other number"
  //  }
  //  println("result of match  is :" + result)
  val value = 3
  val result = value match {
    case i if i == 1 => "one"
    case i if i == 2 => "two"
    case _ => "some other number"
  }
  println("result of match is : " + result)
}

结果为:

result of match is : some other number

case还可以匹配类型

package cn.chinahadoop.scala
class Basic5 {
}
object Basic5 extends App {
  //  val value = 3
  //  //match是有返回值的
  //  val result = value match {
  //    case 1 => "one"
  //    case 2 => "two"
  //    case _ => "some other number"
  //  }
  //  println("result of match  is :" + result)
  //  val value = 3
  //  val result = value match {
  //    case i if i == 1 => "one"
  //    case i if i == 2 => "two"
  //    case _ => "some other number"
  //
  //  }
  //  println("result of match is : " + result)
  def t(obj: Any) = obj match {
    case x: Int => println("Int")
    case s: String => println("String")
    case _ => println("unknown type")
  }
  t(1)
}

结果为:

Int
package cn.chinahadoop.scala
class Basic5 {
}
object Basic5 extends App {
  //  val value = 3
  //  //match是有返回值的
  //  val result = value match {
  //    case 1 => "one"
  //    case 2 => "two"
  //    case _ => "some other number"
  //  }
  //  println("result of match  is :" + result)
  //  val value = 3
  //  val result = value match {
  //    case i if i == 1 => "one"
  //    case i if i == 2 => "two"
  //    case _ => "some other number"
  //
  //  }
  //  println("result of match is : " + result)
  def t(obj: Any) = obj match {
    case x: Int => println("Int")
    case s: String => println("String")
    case _ => println("unknown type")
  }
  // t(1)
  t("1")
}

结果为:

String
package cn.chinahadoop.scala
class Basic5 {
}
object Basic5 extends App {
  //  val value = 3
  //  //match是有返回值的
  //  val result = value match {
  //    case 1 => "one"
  //    case 2 => "two"
  //    case _ => "some other number"
  //  }
  //  println("result of match  is :" + result)
  //  val value = 3
  //  val result = value match {
  //    case i if i == 1 => "one"
  //    case i if i == 2 => "two"
  //    case _ => "some other number"
  //
  //  }
  //  println("result of match is : " + result)
  def t(obj: Any) = obj match {
    case x: Int => println("Int")
    case s: String => println("String")
    case _ => println("unknown type")
  }
  // t(1)
 // t("1")
  t(1L)
}

结果为:

unknown type