码迷,mamicode.com
首页 > 其他好文 > 详细

scala学习手记 - case表达式里的模式变量和常量

时间:2016-09-18 23:31:31      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

再来看一下之前的一段代码:

def process(input: Any) {
  input match {
  case (a: Int, b: Int) => println("Processing (int, int)... ")
  case (a: Double, b: Double) => println("Processing (double, double)... ")
  case msg: Int if (msg > 1000000) => println("Processing int > 1000000")
  case msg: Int => println("Processing int... ")
  case msg: String => println("Processing string... ")
  case _ => printf("Can‘t handle %s... ", input)
  }
}

在上面的代码里出现了三个占位符a, b和msg。他们就是占位符。

按照约定,Scala中模式变量要以小写字母开头,常量要以大写字母开头。所以这里一定要注意大小写,这里就是一个出错的实例:

class Sample {
  val max = 100
  val MIN = 0
  def process(input: Int) {
    input match {
      case max => println("Don‘t try this at home")
      case MIN => println("You matched min")
      case _ => println("Unreachable!!")
    }
  }
}

虽然程序可以执行,但是在执行的时候会给出警告:

技术分享

提示模式变量的模式无法匹配。执行结果也和预期严重不一致。执行的代码:

new Sample().process(100)
new Sample().process(0)
new Sample().process(10)

执行结果:

技术分享

如果偏要使用这个值的话可以通过对象或类来引用这个变量:

class Sample {
  val max = 100
  val MIN = 0
  def process(input: Int) {
    input match {
      case this.max => println("Don‘t try this at home")
      case MIN => println("You matched min")
      case _ => println("Unreachable!!")
    }
  }
}

new Sample().process(100)
new Sample().process(0)
new Sample().process(10)

此时的执行结果是正确的:

技术分享

就这样!

######

scala学习手记 - case表达式里的模式变量和常量

标签:

原文地址:http://www.cnblogs.com/amunote/p/5883346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!