`
alanwu
  • 浏览: 199594 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Scala小布丁: 字符串标识符(literal identifier)

阅读更多
先来看一段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
分享到:
评论

相关推荐

    scala-parser-combinators_2.11-1.0.4-API文档-中英对照版.zip

    赠送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字符串的实例详解

    在Scala编程中,处理JSON数据是一项常见的任务,用于解析、序列化和操作JSON字符串。本文将详细介绍如何使用`json-smart`库来解析JSON字符串。`json-smart`是一个轻量级的Java库,它提供了高效的JSON解析和生成功能...

    Scala的String类方法整合

    **功能描述**:比较当前字符串与另一个对象(转换为字符串)的字典顺序。 **示例**: ```scala val str1 = "Hello" val str2 = "World" println(str1.compareTo(str2)) // 输出负数,表示 'Hello' 在字典顺序上位于...

    scala-xml_2.11-1.0.4-API文档-中英对照版.zip

    赠送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问题:Scala的一些OJ解决方案

    使用Scala的Leetcode解决方案 ID 问题 解决方案 测试用例 58 345 Scala99: 将Scala-test和Junit集成到Scala中 编写此应用程序时,我发现它可以在本地Intellij IDEA+Junit运行测试用例,但是如果尝试执行sbt test...

    Java中字符串去重的特性介绍

    Java中的字符串去重特性是Java 8 Update 20引入的一种优化机制,旨在减少内存消耗,特别是对于大量字符串操作的应用。这一特性依赖于G1(Garbage First)垃圾回收器,G1是Java 8中默认关闭的一个高级垃圾回收算法。...

    在Scala中进行编程:全面的分步指南Programming in Scala: A comprehensive step-by-step guide

    《在Scala中进行编程:全面的分步指南》(Programming in Scala: A comprehensive step-by-step guide)是一本关于Scala编程语言的权威教材。这本书的独特之处在于它的共同作者是Scala语言的设计师Martin Odersky,...

    大数据课程-Scala编程基础-1.Scala语言初识_lk_edit.ppt

    【大数据课程-Scala编程基础-1.Scala语言初识】是针对初学者设计的一门课程,旨在教授如何入门Scala编程,特别适合已有Java基础的学员。Scala是一种在2001年由洛桑联邦理工学院(EPFL)的编程方法实验室研发的语言,...

    面向 Java 开发人员的 Scala 指南

    ### 面向Java开发人员的Scala指南 #### 一、引言 随着技术的不断发展,编程语言也在不断地演进。长期以来,Java作为面向对象编程的代表性语言,在软件开发领域占据主导地位。然而,近年来,一种名为Scala的新语言...

    Scala 讲座.rar

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,为开发者提供了高度灵活性。在这个“Scala讲座”中,我们将会深入探讨这个语言的核心概念和实际应用,帮助那些追求创新和编程乐趣的程序员更...

    FuzzyDict:Scala 的快速模糊字符串匹配字典

    快速模糊字符串匹配字典。 基于Naoaki Okazaki和Jun'ichi Tsujii [1] 的Simple and Efficient Algorithm for Approximate Dictionary Matching的Simple and Efficient Algorithm for Approximate Dictionary ...

    scalatour:麻省理工学院 HSSP 课程

    Scala之旅 MIT Spring HSSP 2015 Language Spec 课程,勇敢者: : 教学大纲 第 1 周 - 基础知识 Scala 的基本前提:类 Haskell 的函数式编程与类 Java 的面向对象... 字符串插值 异常处理 第 2 周 - 面向对象编程 班级

    scala语言的学习记录

    Scala支持多种字符串输出方式,包括字符串连接、`printf`方法、字符串模板(s前缀)以及格式化模板(f前缀)。模板语法允许直接插入变量值,如`s“${age}岁的${name}在尚硅谷学习”`。 5. 数据类型: Scala中的...

    scala例程:Scala例程

    Scala和Spark例程 Scala和Spark例程培训和测试库 如何运行代码 克隆存储库 从以下位置下载MovieLens 100K数据集:[ ] 解压缩它,然后将生成的ml-100k文件夹移动到scala-routines / data文件夹中。 在IntelliJ欢迎...

Global site tag (gtag.js) - Google Analytics