`

scala-简介

 
阅读更多

 

 

 

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)
	}
}

 

 

 

 

 

 

  • 大小: 61 KB
  • 大小: 21.2 KB
  • 大小: 29.5 KB
分享到:
评论

相关推荐

    scala-2.12.3|2.11.11.msi网盘下载链接

    #### 一、Scala简介 Scala是一种多范式编程语言,设计初衷是集成面向对象编程和函数式编程的各种特性。它兼容Java,可以在Java平台上运行,并能无缝调用Java库。Scala语言既具有静态类型系统以避免许多常见的程序...

    scala-2.12.10.tgz

    1. Scala简介:Scala由Martin Odersky和他的团队在2003年开发,其名称是“Scalable Language”的缩写。它旨在提高开发效率,提供简洁、可读性强的语法,同时支持大规模并发处理。 2. 安装Scala:在Linux系统中,...

    scala-2.11.12

    1. Scala简介: Scala由Martin Odersky于2003年创建,它的名字是“Scalable Language”的缩写,旨在提供一种可扩展的语言,既能满足大规模并发处理的需求,又能保持代码的简洁性和可读性。Scala运行在Java虚拟机...

    spark-Scala-介绍-教程-入门-手册-调研1

    **Spark与Scala简介** Spark是大数据处理领域的一个高效、通用且可扩展的开源框架,它主要用Scala语言编写。Scala是一种静态类型的编程语言,融合了面向对象和函数式编程的概念,设计目标是提供一种简洁、高生产力...

    scala入门--文档版本

    #### 一、Scala简介与特点 **Scala**是一种融合了面向对象编程和函数式编程特性的现代编程语言。它被设计成一种可扩展的语言,旨在克服传统编程语言的一些限制,同时保持代码的简洁性和可读性。 - **语言特点**: ...

    tbc-scala-20150423

    1. **Scala简介**: Scala由EPFL(瑞士洛桑联邦理工学院)的Martin Odersky教授设计,目标是提供一种统一的编程模型,既能支持面向对象的设计,又能利用函数式编程的优点。 2. **类型系统**: Scala的类型系统...

    solr-scala-client:Scala的Solr客户端

    **一、solr-scala-client简介** `solr-scala-client`是Solr客户端的一种实现,专门针对Scala编程语言进行了优化。它封装了与Solr服务器通信的细节,提供了更符合Scala语法规则的API,使开发人员能够更高效地操作Solr...

    swagger-scala-module:对scala的Swagger支持

    此外,`README.md` 文件会提供项目的简介、安装和使用步骤,而 `examples` 目录则可能包含了一些示例应用,展示如何在实际项目中使用该模块。 使用 `swagger-scala-module` 可以带来诸多好处,例如: 1. **类型...

    python-scala-lua等多种语言的学习的好书

    根据提供的文件信息,我们可以了解到文档主要介绍了多种编程语言的学习资源,其中重点提到了C++、Python、Scala和Lua,以及它们的编程教程和一些基础知识。同时,文件中也列举了Assembly(汇编语言)、Awk以及C语言...

    搭建scala环境,已验证。

    一、Scala简介与需求 Scala是一种多范式编程语言,结合了面向对象和函数式编程的特点,运行在Java虚拟机(JVM)上。其设计目标是融合多种编程模式的优点,提供更简洁、可扩展的代码结构,同时保持与Java的互操作性...

    scala-redis:一个scala库,用于在客户端使用一致的哈希连接到redis服务器或redis节点集群

    ### Redis简介 Redis是一个开源的、基于键值对的数据存储系统,常被用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,且具有高速读写性能。 ### Scala-Redis库的特点 1...

    scala-oauth2-provider:用Scala编写的OAuth 2.0服务器端实现

    **OAuth 2.0简介** OAuth 2.0是一种授权框架,它允许第三方应用安全地访问用户存储在另一服务上的资源,而无需获取用户的用户名和密码。OAuth 2.0主要用于API安全,允许用户授权第三方应用访问其在特定服务上的数据...

    scala-graal:从Scala轻松,安全地使用Graal功能。 还具有基于Scala的React SSR

    **GraalVM简介** GraalVM是一个高性能的运行时环境,它集成了JVM、JavaScript引擎、Python解释器等多种语言运行时,同时也支持编译为原生代码,提供更快的执行速度。GraalVM的一个重要特性是其高级编译器GraalJVM ...

    play-scala-slick-example:示例使用Slick播放Scala项目

    Scala Slick简介** Slick是由Scala社区开发的数据库访问库,它允许我们使用强大的、类型安全的SQL查询。Slick将数据库表映射为Scala的case class,SQL查询表达为函数式代码,极大地减少了出错的可能性。 **3. 集成...

    lettuce-scala-test

    4. `README.md`: 项目简介、安装和使用指南。 5. `.gitignore`: 忽略不纳入版本控制的文件和目录。 通过这个项目,开发者可以学习如何在 Scala 应用中优雅地使用 lettuce,编写健壮的测试代码,确保 Redis 交互的...

    SCALA-Labo1

    ### Scala简介 Scala 是一种多范式编程语言,由 Martin Odersky 在2003年设计并推出。它结合了面向对象编程(OOP)和函数式编程(FP)的优点,使得代码简洁且可读性强。Scala 运行在 Java 虚拟机(JVM)上,因此可以...

    scala-spark-tutorial:詹姆斯的Apache Spark项目与Scala课程

    **Apache Spark简介** Apache Spark是一个开源的大数据处理框架,以其内存计算和高效的并行计算能力而闻名。它提供了比传统Hadoop MapReduce更高的性能,因为Spark在内存中执行计算,减少了磁盘I/O的时间开销。...

    scala-course-2021-spring

    **Scala简介** Scala是由Martin Odersky在2003年设计的,它的名字来源于“Scalable Language”的缩写。它支持多种编程范式,包括面向对象、函数式编程以及命令式编程,使开发者能够在同一项目中自由切换风格。Scala...

    play-scala-forms-example:示例Play项目,显示表单处理

    Play Framework简介** Play Framework推崇MVC(Model-View-Controller)架构模式,强调开发的快速迭代和热部署特性。它支持RESTful架构,与现代Web服务理念相吻合。Scala版本的Play提供了函数式编程的语法,使代码...

Global site tag (gtag.js) - Google Analytics