scala定义变量
//不可变的变量 val msg = "Hello, world!" //可变的变量,可以不用写变量类型,scala会自动推导 val msg2: java.lang.String = "Hello again, world!"
scala函数基本构成
定义函数如下
def max(x: Int, y: Int): Int = { if (x > y) x else y }
scan循环
var i = 0 while (i < args.length) { println(args(i)) i += 1 } //用scala函数的语法 args.foreach(arg => println(arg)) //完整参数形式 args.foreach((arg: String) => println(arg)) //如果函数文本只有一个参数一句话组成可以简写 args.foreach(println) //迭代,可以写到脚本里,比如test.scala for (arg <- args) println(arg)
scala函数文本的语法
带类型的参数化数组
val greetStrings = new Array[String](3) greetStrings(0) = "Hello" greetStrings(1) = ", " greetStrings(2) = "world!\n" for (i <- 0 to 2) print(greetStrings(i)) //上面那段相当于 val greetStrings:Array[String] = new Array[String](3) greetStrings.update(0, "Hello") greetStrings.update(1, ", ") greetStrings.update(2, "world!\n") for (i <- 0.to(2)) print(greetStrings.apply(i))
val numNames = Array("zero", "one", "two") //上面这段代码相当于 val numNames2:Array[String] = Array.apply("zero", "one", "two")
1+2等于
1.+(2)
对象的定义
package test.obj /** * 定义Rational类,类后面跟的(n:Int,d:Int)是构造函数传入的参数 */ class Rational(n:Int,d:Int) { //定义这两行是lessThan()函数中比较的时候this.n == that.n的时候不会报错 val numer: Int = n val denom: Int = d private val g = gcd(n.abs, d.abs) println("create->"+n+"/"+d) //检查分母不能为0, require(d != 0) /** * 定义一个从构造函数,从构造函数中调用了主构造函数 */ def this(n:Int) { this(n,1) } /** * 重载toString函数,默认toSring返回的结果是Rational@4b1d6571 */ override def toString():String = { n +"/"+ d } /** * 两个Rational相加,这个操作不会改变原始值,会返回一个新对象 */ def add(that: Rational): Rational = { new Rational( number * that.denom + that.number * denom, denom * that.denom) } /** * 比较两个Rational大小,这里用到了this关键字,这里是可以省略的 */ def lessThan(that: Rational): Boolean = { this.number * that.denom < that.number * this.denom } /** * 返回两个Rational中最大的那个,注意else中的this就不能省略了,返回就返回空了 */ def max(that: Rational): Rational = { if(this.lessThan(that)) { that } else { this } } //定义私有的函数 private def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b) /** * 重载 + ,这样可以实现两个Ratioinal的 + 操作了 */ def +(that: Rational): Rational = { new Rational( number * that.denom + that.number * denom, denom * that.denom ) } /** * 函数重载,可以传入整型,这样可以实现Rational和整数之间的运算 */ def +(i: Int): Rational = { new Rational(number + i * denom, denom) } /** * 重载 * 操作,让两个Rational之间实现乘法操作 */ def *(that: Rational): Rational = { new Rational(number * that.number, denom * that.denom) } /** * 重载 * 操作,让Rational和整数相乘 */ def *(i: Int): Rational = { new Rational(number * i, denom) } /** * 重载- 操作,让两个Rational之间实现减法操作 */ def -(that: Rational): Rational = { new Rational( number * that.denom - that.number * denom, denom * that.denom ) } /** * 重载 * 操作,让Rational和整数之间实现减法操作 */ def -(i: Int): Rational = { new Rational(number - i* denom, denom) } /** * 重载 * 操作,让两个Rational之间实现除法操作 */ def /(that: Rational): Rational = { new Rational(number * that.denom, denom * that.number) } /** * 重载 * 操作,让Rational和整数之间实现除法操作 */ def /(i: Int): Rational = { new Rational(number, denom * i) } } /** * 测试类 */ object Test { def main(args : Array[String]) { var x1 = new Rational(1,2) var x2 = new Rational(2,3) var x3 = x1.add(x2) println(x3) println(x1 + x3) println(x2 * x3) println("======") println(2 + x1) } implicit def intToRational(x: Int): Rational = { new Rational(x) } }
相关推荐
1. Scala简介:Scala由Martin Odersky和他的团队在2003年开发,其名称是“Scalable Language”的缩写。它旨在提高开发效率,提供简洁、可读性强的语法,同时支持大规模并发处理。 2. 安装Scala:在Linux系统中,...
#### 一、Scala简介 Scala是一种多范式编程语言,设计初衷是集成面向对象编程和函数式编程的各种特性。它兼容Java,可以在Java平台上运行,并能无缝调用Java库。Scala语言既具有静态类型系统以避免许多常见的程序...
1. Scala简介: Scala由Martin Odersky于2003年创建,它的名字是“Scalable Language”的缩写,旨在提供一种可扩展的语言,既能满足大规模并发处理的需求,又能保持代码的简洁性和可读性。Scala运行在Java虚拟机...
**Spark与Scala简介** Spark是大数据处理领域的一个高效、通用且可扩展的开源框架,它主要用Scala语言编写。Scala是一种静态类型的编程语言,融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、高生产力...
#### 一、Scala简介与特点 **Scala**是一种融合了面向对象编程和函数式编程特性的现代编程语言。它被设计成一种可扩展的语言,旨在克服传统编程语言的一些限制,同时保持代码的简洁性和可读性。 - **语言特点**: ...
1. **Scala简介**: Scala由EPFL(瑞士洛桑联邦理工学院)的Martin Odersky教授设计,目标是提供一种统一的编程模型,既能支持面向对象的设计,又能利用函数式编程的优点。 2. **类型系统**: Scala的类型系统...
**一、solr-scala-client简介** `solr-scala-client`是Solr客户端的一种实现,专门针对Scala编程语言进行了优化。它封装了与Solr服务器通信的细节,提供了更符合Scala语法规则的API,使开发人员能够更高效地操作Solr...
此外,`README.md` 文件会提供项目的简介、安装和使用步骤,而 `examples` 目录则可能包含了一些示例应用,展示如何在实际项目中使用该模块。 使用 `swagger-scala-module` 可以带来诸多好处,例如: 1. **类型...
根据提供的文件信息,我们可以了解到文档主要介绍了多种编程语言的学习资源,其中重点提到了C++、Python、Scala和Lua,以及它们的编程教程和一些基础知识。同时,文件中也列举了Assembly(汇编语言)、Awk以及C语言...
一、Scala简介与需求 Scala是一种多范式编程语言,结合了面向对象和函数式编程的特点,运行在Java虚拟机(JVM)上。其设计目标是融合多种编程模式的优点,提供更简洁、可扩展的代码结构,同时保持与Java的互操作性...
### Redis简介 Redis是一个开源的、基于键值对的数据存储系统,常被用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,且具有高速读写性能。 ### Scala-Redis库的特点 1...
**OAuth 2.0简介** OAuth 2.0是一种授权框架,它允许第三方应用安全地访问用户存储在另一服务上的资源,而无需获取用户的用户名和密码。OAuth 2.0主要用于API安全,允许用户授权第三方应用访问其在特定服务上的数据...
**GraalVM简介** GraalVM是一个高性能的运行时环境,它集成了JVM、JavaScript引擎、Python解释器等多种语言运行时,同时也支持编译为原生代码,提供更快的执行速度。GraalVM的一个重要特性是其高级编译器GraalJVM ...
Scala Slick简介** Slick是由Scala社区开发的数据库访问库,它允许我们使用强大的、类型安全的SQL查询。Slick将数据库表映射为Scala的case class,SQL查询表达为函数式代码,极大地减少了出错的可能性。 **3. 集成...
4. `README.md`: 项目简介、安装和使用指南。 5. `.gitignore`: 忽略不纳入版本控制的文件和目录。 通过这个项目,开发者可以学习如何在 Scala 应用中优雅地使用 lettuce,编写健壮的测试代码,确保 Redis 交互的...
### Scala简介 Scala 是一种多范式编程语言,由 Martin Odersky 在2003年设计并推出。它结合了面向对象编程(OOP)和函数式编程(FP)的优点,使得代码简洁且可读性强。Scala 运行在 Java 虚拟机(JVM)上,因此可以...
**Apache Spark简介** Apache Spark是一个开源的大数据处理框架,以其内存计算和高效的并行计算能力而闻名。它提供了比传统Hadoop MapReduce更高的性能,因为Spark在内存中执行计算,减少了磁盘I/O的时间开销。...
**Scala简介** Scala是由Martin Odersky在2003年设计的,它的名字来源于“Scalable Language”的缩写。它支持多种编程范式,包括面向对象、函数式编程以及命令式编程,使开发者能够在同一项目中自由切换风格。Scala...
Play Framework简介** Play Framework推崇MVC(Model-View-Controller)架构模式,强调开发的快速迭代和热部署特性。它支持RESTful架构,与现代Web服务理念相吻合。Scala版本的Play提供了函数式编程的语法,使代码...