先来看一段Scala代码
scala> def f(`yield` : Int) = 5 match { case `yield` => "yup"; case _ => "nope"}
f: (yield: Int)java.lang.String
scala> f(5)
res1: java.lang.String = yup
这段代码定义了一个函数,包含一个参数,函数主题是Pattern Match.
有趣的地方是参数变量是`yield`,
而且当传入5时,`yield`能match起来。
这是为什么呢?
Scala有相当多的方法表示标识符,如Java的字母和操作符外,有混合型标识符,操作符型标识符,还有字符串标识符。
字符串标识符用``包一个字符串,如`x`,`<hello>`都是合法的。这种标识符其中一个用法是和其他语言交互的时候,如果碰到Scala保留关键字也不怕。一个典型的情况是需要调用Java的Thread.yield()时,因为yield是Scala保留关键字,所以编译不通过,需要用Thread.`yield`()。
转回来继续看上面的例子,
def f(`yield` : Int)
参数列表中`yield`是参数名,因为yield是保留字,所以用``括起来。
5 match { case `yield` => "yup"; case _ => "nope"}
这里的`yield`是用了pattern match的一个特性。 pattern match在遇到小写的字母开头时会把它当变量赋予值,这是用得最多的情况;当遇到大小字母开头的变量名时,会试着当常量对待;而当遇到用``时,它会用该变量所含的值去匹配。
如
scala> val a = 2
a: Int = 2
scala> 2 match {case `a` => println("Yes"); case _ => println("No")}
Yes
所以上面的例子用这样也是一样的效果
scala> def g(x : Int) = 5 match { case `x` => "yup"; case _ => "nope"}
g: (x: Int)java.lang.String
scala> g(5)
res3: java.lang.String = yup
结论
这个小例子含了Scala的两个小布丁,一是用``当做变量名,二是``在模式匹配时的特性,取变量值进行匹配。
更多讨论请见
http://groups.google.com/group/scalacn/t/908c379132da18e1
分享到:
相关推荐
【课程大纲】第1讲-Spark的前世今生第2讲-课程介绍、特色与价值第3讲-Scala编程:基础语法第4讲-Scala编程:条件控制与循环第5讲-Scala编程:函数入门第6讲-Scala编程:函数入门之默认参数和带名参数第7讲-Scala编程...
赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 包含翻译后的API...
用途:可用于论文抄袭检测、DNA等。...算法实现思路:通过对一个字符串插入、删除、替换转变成另一个字符串所需要的步骤称为距离,计算两个字符串之间的距离,从而可以得到两个字符串之间的相似度。
在Scala编程中,处理JSON数据是一项常见的任务,用于解析、序列化和操作JSON字符串。本文将详细介绍如何使用`json-smart`库来解析JSON字符串。`json-smart`是一个轻量级的Java库,它提供了高效的JSON解析和生成功能...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
【课程大纲】第1讲-Spark的前世今生 共12页第2讲-课程介绍、特色与价值 共13页第3讲-Scala编程详解:基础语法 共8页第4讲-Scala编程详解:条件控制与循环 共7页第5讲-Scala编程详解:函数入门 共5页第6讲-Scala编程...
**功能描述**:比较当前字符串与另一个对象(转换为字符串)的字典顺序。 **示例**: ```scala val str1 = "Hello" val str2 = "World" println(str1.compareTo(str2)) // 输出负数,表示 'Hello' 在字典顺序上位于...
赠送jar包:scala-xml_2.11-1.0.4.jar; 赠送原API文档:scala-xml_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.4-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.4.pom; 包含翻译后的API...
赠送jar包:scala-xml_2.11-1.0.1.jar; 赠送原API文档:scala-xml_2.11-1.0.1-javadoc.jar; 赠送源代码:scala-xml_2.11-1.0.1-sources.jar; 赠送Maven依赖信息文件:scala-xml_2.11-1.0.1.pom; 包含翻译后的API...