先来看一段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
分享到:
相关推荐
赠送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...
主要介绍了 Scala解析Json字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家学习理解这部分内容,需要的朋友可以参考下
用途:可用于论文抄袭检测、DNA等。...算法实现思路:通过对一个字符串插入、删除、替换转变成另一个字符串所需要的步骤称为距离,计算两个字符串之间的距离,从而可以得到两个字符串之间的相似度。
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
Apache Kafka 3.2.0 (Scala 2.12 :kafka_2.12-3.2.0.tgz) 是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。) 是一个开源分布式事件流平台,被数千家公司用于高...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
第3讲-Scala编程详解:基础语法 共8页 第4讲-Scala编程详解:条件控制与循环 共7页 第5讲-Scala编程详解:函数入门 共5页 第6讲-Scala编程详解:函数入门之默认参数和带名参数 共5页 第7讲-Scala编程详解:函数入门...
赠送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...
Scala语言的字符串类型封装的方法总结。具有大多数的String字符串方法名及其描述
使用Scala的Leetcode解决方案 ID 问题 解决方案 测试用例 58 345 Scala99: 将Scala-test和Junit集成到Scala中 编写此应用程序时,我发现它可以在本地Intellij IDEA+Junit运行测试用例,但是如果尝试执行sbt test...
将org.plotly-scala::plotly-almond:0.8.1依赖项添加到笔记本中。 (最新版本:)然后初始化plotly-scala,并像使用它一样使用它 import $ivy . `org.plotly-scala::plotly-almond:0.8.1` import plotly . _ import
连载(4) Scala语言探险 二 博文链接:https://fineqtbull.iteye.com/blog/480538