Scala:Functional Objects

先上代码

 1 class FunctionalObjects(var _x: Int, var _y: Int) {
 2   require(_x > 0)
 3   require(_y > 0)
 4
 5   def this(value: Int) = this(value, value)
 6
 7   def x = _x
 8
 9   def x_=(value: Int) { _x = value }
10
11   def y = _y
12
13   def y_=(value: Int) { _y = value }
14
15   def +(value: Int): FunctionalObjects = {
16     _x += value
17     _y += value
18
19     this
20   }
21
22   def +(value: FunctionalObjects): FunctionalObjects = {
23     _x += value.x
24     _y += value.y
25
26     this
27   }
28
29
30   override def toString(): String = {
31     "("+ _x +", "+ _y +")"
32   }
33 }
34
35 object FunctionalObjects {
36   implicit def intToFunctionalObjectsTest(value: Int) = new FunctionalObjects(value)
37
38   def main(args: Array[String]) {
39     var test = new FunctionalObjects(5)
40     test.y = 6
41     println(test)
42     println(test + 4)
43     println(4 + test)
44   }
45 }

隐式类型转换、运算符方法、属性语法,这些都不必多说,大家一看就明白,scala的构造方法得简单的解释一下,类型名称后面跟随的参数列表就是“主要构造函数”的签名,类型定义中出现的可执行语句,都是其方法体。def this 定义的构造方法为“次要构造方法”。

时间: 2024-12-29 13:00:39

Scala:Functional Objects的相关文章

Scala:没有continue,break怎么办?

scala自身是没有continue,break这两个语法关键词的. 但是实际上我们还是很希望有这两个语法,那么我们是否可以自己实现呢? 从官网上搜索,我们可以找到一下关于break的类相关资料: Breaks extends AnyRef A class that can be instantiated for the break control abstraction. Example usage: val mybreaks = new Breaks import mybreaks.{bre

Scala:映射和元组

映射是键值对偶的集合.Scala有一个通用的叫法——元组:n个对象的聚集,并不一定要相同的类型. 构造映射 键A -> 值B scala> val scores = Map("wcc100"->100)//不可变映射 scores: scala.collection.immutable.Map[String,Int] = Map(wcc100 -> 100) scala> val scores1 = scala.collection.mutable.Map

Scala:HelloWorld

代码 1 object HelloWorld { 2 def main(args: Array[String]): Unit = { 3 println("Hello world") 4 } 5 } 解说 object关键字相当于static(更确切的说法是单例模式的一种语言层面的支持),def关键字定义方法,方法参数和返回值都采用后缀形式,即:“:类型”,Unit代表void,数组的表示采用Array[T],main是特殊的入口方法. 在控制台执行“scala 对象名”,传入的参数必

Scala:Next Steps in Scala

Array 1 val greetStrings = new Array[String](3) 2 greetStrings(0) = "Hello" 3 greetStrings(1) = "," 4 greetStrings(2) = "world!\n" 5 6 for(i <- 0 to 2) 7 print(greetStrings(i)) 8 9 val numNames = Array("zero", &q

Scala:条件表达式的好处

条件表达式的好处之一是:让代码更简洁,例如在一个需要根据不同条件收集不同值的场景中,多数语言提供的代码如下: 1 var tmp = 0; 2 3 if(conditinon 1) 4 { 5 tmp = xxx; 6 } 7 else if(condition 2) 8 { 9 tmp = yyy; 10 } 11 else 12 { 13 tmp = zzz; 14 } 采用 scala 这种所有都是表达式的语言来说就简单多了,代码如下: 1 var tmp = 2 if(conditino

LINQ:To Objects - 如何操作字符串

LINQ 如何操作字符串 前言: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述>(90+赞) 社会反响不错,但自己却始终觉得缺点什么!“纸上得来终觉浅,绝知此事要躬行”,没错,就是实战!这次让我们一起来看看一些操作字符串的技巧,也许能引我们从不同的角度思考问题,从而走出思维的死角! LINQ 可用于查询和转换字符串和字符串集合.它对文本文件中的半结构化数据尤其有用.LINQ 查询可与传统的字符串函数和正则表达式结合使用. 例如,可以使用 Split 或 Split 方法来创建字

Scala:Dynamic

Scala开篇(目录) 从Scala 2.10 开始,增加了Dynamic类型,所有直接或间接的继承自 Dynamic 的类,都可以实现. Dynamic 继承自 Any,它的源代码中什么都没有,只有一句话. trait Dynamic extends Any 按照官方的描述,Dynamic 是一个运行动态执行的 trait 标识,它没有成员,具体的实现由编译器嵌入,它可以动态的执行任意名字的方法或参数.这个怎么理解呢,我姑且认为它是动态产生方法和字段吧. 要想使用Dynamic ,需要打开编译

Scala:trait

Scala开篇(目录) 在Scala中有一个trait类型,它可以被继承,而且支持多重继承,其实它更像我们熟悉的接口(interface),但它与接口又有不同之处是: trait中可以写方法的实现,interface不可以(java8开始支持接口中允许写方法实现代码了),这样看起来trait又很像抽象类(abstract),一会我们会通过反编译,看看Scala中对trait是怎样处理的,先来看看trait的使用. //声明一个 trait trait TraitBase{ def add(x:I

Scala:object(单例)

Scala开篇(目录) 使用Java的同学,对单例模式应该很熟悉了,在类的内部声明一个private static 的自身类型的对象,然后通过一个static的方法返回即可.在Scala中,是没有static这个东西的,但是它也为我们提供了单例模式的实现方法,那就是 object(别混了,不是万物之根的object) Scala中使用单例模式时,除了定义的类之外,还要定义一个同名的object对象,它和类的区别是,object对象不能带参数,先看一段实现代码 /**这是我们定义的类 构造函数被我