scala学习手记40 - case表达式里的模式变量和常量
再来看一下之前的一段代码:
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学习手记40 - case表达式里的模式变量和常量的更多相关文章
- scala学习手记40 - 使用case类
前面两节我们已经多次接触过case关键字了.case关键字不仅可以用在match/case中来执行模式匹配,也可以用来修饰类.不过用case修饰的类也主要是用来做模式匹配.在上一节曾经提到过match ...
- scala学习手记39 - 模式匹配
在java中有switch/case这样的模式匹配语句,可以匹配的类型包括int,byte,char,short, enum,在java8又支持了字符串. 在scala中也有类似的模式匹配语句,即ma ...
- scala学习笔记1(表达式)
<pre name="code" class="plain">//Scala中的 main 函数需要存在于 object 对象中,我们需要一个obj ...
- scala学习手记7 - 运算符重载
从语法上来说scala是没有运算符的.之前的一节里也曾提到过scala的运算符实际上是方法名,如1 + 2实际上就是1.+(2).我们可以将之视为运算符,是因为scala的一个特性:如果方法的参数小于 ...
- java===java基础学习(1)---数据类型,运算,变量,常量
今天起开始了java的学习之路,主要学习了数据类型和运算,变量,常量.基本和python有很多相通的地方,所以看起来很容易上手.下面是学习笔记! package testbotoo; public c ...
- scala学习手记38 - 方法命名约定和for表达式
方法命名约定 之前在学习<运算符重载>一节时曾经说过一个方法命名约定:方法的第一个字符决定了方法的优先级.现在再说另一个命名约定:如果方法以冒号(:)结尾,则调用目标是运算符后面的实例. ...
- scala学习手记8 - 自适应的默认做法
scala有一些默认做法,会让代码更简洁.更易读写,下面列出了这样几个特性: 1. 支持脚本.scala支持脚本,因此无须将所有的代码都放到类里.如果脚本可以满足需求,就将代码放到一个脚本里,无须再创 ...
- scala学习笔记:match表达式
写了一个超级长的表达式,估计不是最简洁的: scala> def foo(ch:Any)=ch match { case true=>"male";case false ...
- scala学习手记35 - 隐式类型转换
先来看一下下面的内容: 2 days "ago" 5 days "from_now" 如上的内容具体应该是什么呢?不过怎么看也不像是代码.不过既然是在学代码,拿 ...
随机推荐
- C#操作AD及Exchange Server总结(二)
上一节C#操作AD及Exchange Server总结(一)写了对AD的操作,新建AD用户后,通常都需要为此用户开启Exchange邮箱,接下来写如何远程操作Exchange. 三.对Exchange ...
- 巨蟒python全栈开发数据库前端6:事件onclick的两种绑定方式&&onblur和onfocus事件&&window.onload解释&&小米商城讲解
1.回顾上节内容(JavaScript) 一.JavaScript概述 1.ECMAScript和JavaScript的关系 2.ECMAScript的历史 3.JavaScript是一门前后端都可以 ...
- 14.wamp自定义网站根目录
1.首先打开Apache 中的配置文件httpd.conf crtl+f 搜索 documentroot ,在找到的目录中将目录修改自己的网站的目录,注意\ 与/ 2.在向下移动,找到<Di ...
- Nginx-rtmp直播之业务流程分析 http://www.mamicode.com/info-detail-2287896.html
Nginx-rtmp直播之业务流程分析 http://www.mamicode.com/info-detail-2287896.html
- 用jq实现鼠标移入按钮背景渐变其他的背景效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- is和==的区别以及编码、解码
一.is和==的区别 1,id( ) id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址: s1 = 2 print(id(s1)) # 15143680 ...
- PHP Laravel 本地化语言支持
That`s it. 我发如今网上Laravel的学习资料实在是太少了.好多东西须要自己去弄.去理解. 我的方法另一个,就是去github上面下载老外写的Laravel站点,然后拿下来自己执行 ...
- [译转]深入理解LayoutInflater.inflate()
原文链接:https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/ 译文连接:http://bl ...
- Redis四(Set操作)
1.Set操作 Set集合就是不允许重复的列表 集合操作(无序) sadd(name,values) 1 # name对应的集合中添加元素 scard(name) 1 获取name对应的集合中元素个数 ...
- Delphi 正则表达式语法(4): 常用转义字符与 .
Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var reg: TPerlRegEx; begin reg := TPerlRegE ...