scala 中下划线的含义
1、Placeholder syntax(占位符,函数参数的占位符)
Multiple underscores mean multiple parameters, not reuse of a single parameter repeatedly.The first underscore represents the first parameter, the second underscore the second parameter,the third underscore the third parameter, and so on.
例如:
正确示范:
scala> (1 to 9).map(_*2)
res0: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10, 12, 14, 16, 18)
如果要映射成一个元组的集合x=>(x,x*x) 比如 :1->(1,1),2->(2,4) ,3->(3,9) ... 9->(9,81)
可以这样:
scala> (1 to 9).map(x=>(x,x*x))
res2: scala.collection.immutable.IndexedSeq[(Int, Int)] = Vector((1,1), (2,4), (3,9), (4,16), (5,25), (6,36), (7,49), (8,64), (9,81))
这种情况下,就不能使用_来代替,因为多个下划线意思多个参数,而不是单个参数的重复使用
错误示范:
scala> (1 to 9).map(x=>(_,_*_))
<console>:8: error: missing parameter type for expanded function ((x$1) => scala
.Tuple2(x$1, ((x$2, x$3) => x$2.$times(x$3))))
(1 to 9).map(x=>(_,_*_))
所以这种情况下的使用条件是:参数在右侧只能出现一次,可以用_替换,多个参数多个_
2、Partially applied functions(部分应用函数)
A partially applied function is an expression in which you don’t supply all of the arguments needed by the function. Instead, you supply some, or none, of the needed arguments
例如:
对于如下sum函数定义
scala> def sum(a: Int, b: Int, c: Int) = a + b + c
sum: (a: Int,b: Int,c: Int)Int
可以有2种情况应用函数sum的部分功能
情况1:不带参数(None of arguments)
scala> val a = sum _
a: (Int, Int, Int) => Int = <function3>
scala> a(1, 2, 3)
res11: Int = 6
情况2:带入部分需要的参数(some of arguments)
scala> val b = sum(1, _: Int, 3)
b: (Int) => Int = <function1>
scala> b(2)
res13: Int = 6
3、其它含义
最难理解的可能就上面的2个用法了,其它下划线_的含义可以参考如下:
相关推荐
Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用
通过阅读"快学Scala(中文完整版).pdf"这本书,读者可以深入了解Scala的基础语法、类和对象、函数式编程概念、并发编程以及如何利用Scala在大数据和云计算环境中工作。同时,这本书可能还会介绍如何使用Scala与其他...
在本项目中,"scala + mybatis 数据库查询",我们将探讨如何将Scala与MyBatis结合,实现高效的数据库查询功能。 1. **Scala与MyBatis的集成** - Scala的静态类型系统和强大的表达能力使其成为构建复杂应用程序的...
10. **包和引用**:Scala中的包机制类似于Java中的包机制,用于组织类和对象。Scala还支持导入语句,可以方便地引用其他包中的类和对象。 11. **断言和单元测试**:Scala内置了断言机制,可以帮助开发者编写更加健壮...
这份指南将帮助Java开发者理解Scala的特性,如如何在Scala中使用面向对象和函数式编程,以及如何利用Scala来提升Java代码的效率和可读性。 最后,"Advance+Payment+Process%26Manual.pdf"和"Scala--.txt"这两个文件...
Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对现有Scala2代码库的兼容性。 在Scala3中,最重要的变化之一是类型推断的增强。新的Typelevel Scala项目引入...
10. **Actor模型**:Akka库是Scala中的并发和分布式计算框架,基于Actor模型,使得编写高性能、容错的应用程序变得简单。 11. **Dotty/Scala 3**:虽然Scala-2.12.3是当前版本,但Scala社区正在开发下一代Scala,即...
scala> def m(x:Int,y:Int) = x*y m: (x: Int, y: Int)Int scala> val f = m _ f: (Int, Int) => Int = 2.集合中的每一个元素 scala> val list = List(1,2,3,4) list: List[Int] = List(1, 2, 3, 4) scala> val ...
scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...
- **条件语句**:Scala中的条件语句与Java相似,但Scala允许返回值,这使得代码更加紧凑。 ```scala def showIf(name: String): String = { if (name == null) "the name is null" else s"the name: $name" } ...
scala.chm 中文学习 入门与进阶, 以及用到的构建工具与测试工具
通过学习这本书,开发者可以提升自己的Scala编程技能,并在实际项目中更高效地运用该语言。 本书的核心知识点包括但不限于以下几个方面: 1. **类型系统**:Scala拥有强大的静态类型系统,包括类、特质、枚举、...
Singleton对象在Scala中提供了一种定义全局可访问对象的方式,而特质(trait)则是一种可以混入类中以提供接口和字段的机制。 Scala的基本类型包括整数、浮点数、字符、字符串、符号和布尔类型。这些基本类型支持...
本次分享的主题为《Design Of Scala》,主要介绍了Scala语言在设计过程中对于一致性与简单性的追求。Scala是一种现代化的多范式编程语言,它既支持面向对象编程又支持函数式编程,这使得Scala能够有效地融合两种编程...
### Scala Tutorial 中英文对照 #### 一、简介 Scala 是一种多范式编程语言,它融合了面向对象编程和函数式编程的特点。本教程旨在为已有一定编程基础,特别是 Java 编程背景的学习者提供一个快速入门指南。通过...
- 类与对象:Scala中的所有数据都是对象,类是创建对象的模板。它支持单例对象和伴生对象,这为设计模式提供了简洁的实现。 - 函数:Scala将函数视为一等公民,可以作为变量赋值、作为参数传递和作为返回值。函数...
2. 将解压后的Scala目录添加到系统的PATH环境变量中,以便在命令行中直接调用 Scala 命令。 3. 确保已安装Java Development Kit (JDK) 8 或更高版本,因为Scala需要JVM才能运行。 4. 验证安装是否成功,可以在命令行...
在2.7版本中,Scala引入了若干创新特性,例如: 1. **类型系统**:Scala具有强大的静态类型系统,支持类型推断,使得编写代码时可以更少地显式声明类型。它还引入了类型类和隐式转换,增加了代码的灵活性和可扩展性...
scalgos, Scala 中的算法 目标学习 ScalaText 实现惯用函数 Scala 中常用算法没有外部依赖项( 除了测试的specs2 )良好的测试和文档建筑安装 git,Scala 和 sbt: brew install git s