IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]一天一段scala代码(十四)

    linger2012liu发表于 2015-04-05 22:42:45
    love 0
    一天一段scala代码(十四)

    为了更好的驾驭spark,最近在学习scala语言特性,主要看《快学scala》,顺便把一些自己认为有用的代码记下来。

    package examples
    
    object Example14 extends App{
    
      
    var ch='9'
    var sign= ch match{
      case '+' => 1
      case '-' => -1
      case _ if Character.isDigit(ch) => Character.digit(ch,10)   //守卫模式,加上条件
      case _ => 0   
      }
    println(sign)
    
    ch='8'
     sign= ch match{
      case c if Character.isDigit(c) => Character.digit(c,10)    //c=ch  变量模式
      case _ => 0
      }
    println(sign)
    
    import scala.math._
    
    var x = Pi
    var y = x match{
      case Pi => 3.14  //Pi is val,not Pi=x   匹配常量
    }
    println(y)
    
    
    def matchConstant(x:Any)=
    {
      val cPi = Pi
      x match
      {
        case `cPi` => 3.14  // `cPi` is val,等于上面的cPi,也就是Pi           匹配常量,一般常量是大写开头的,小写的得加上 反引号
        case cPi => 3.1  // cPi=x   变量模式
        case _ => 3.0
      }
    }
    
    println(matchConstant(Pi))
    println(matchConstant(3.11111))
    
    
    //类型模式
    def getInt(obj:Any) = 
    {
      obj match
      {
        case x:Int => x
        case s:String => Integer.parseInt(s)
        case _:BigInt => Integer.MAX_VALUE
        case _ => 0
      }
    }
    println(getInt("456"))
    
    //还可以匹配数组,列表,元组等。对于那些泛型,不能精准匹配,比如能匹配Map[_,_],而不能匹配Map[String,Integer]
    
    
    
    
    
    //样例类
    abstract class Amount
    case class Dollar(value:Double) extends Amount
    case class Currency(value:Double,unit:String) extends Amount
    //样例类,自动生成apply和unapply方法
    
    val amt = Currency(29.84,"EUR")
    var price = amt.copy(value=19.92)
    println(price)
    price = amt.copy(unit="CHF")   //样例类的拷贝方法,可以任意修改属性
    println(price)
    
    
    
    //密封类 将超类声明为sealed,则其子类必须在同一个文件(超类所在文件)中定义
    
    
    
    //偏函数 不对所有输入都有定义的函数
    //所有偏函数都是PartialFunction[A,B]的一个实例,A是输入类型,B是输出类型
    val f:PartialFunction[Char,Int] = 
    {
      case '+' => 1
      case '-' => -1
    }
    
    println(f('+'))
    
    //偏函数可以是参数
    val res = "-3+4".collect{
      case '+' => 1
      case '-' => -1
    }
    println(res)
    
    
    
    
    
    
    }

    输出
    9
    8
    3.14
    3.14
    3.1
    456
    Currency(19.92,EUR)
    Currency(29.84,CHF)
    1
    Vector(-1, 1)
    

    本文作者:linger
    本文链接:http://blog.csdn.net/lingerlanlan/article/details/44892669


沪ICP备19023445号-2号
友情链接