文档章节

函数式对象之自指向

柳哥
 柳哥
发布于 2014/06/06 15:46
字数 300
阅读 48
收藏 0

关键字this指向当前执行方法被调用的对象实例。或者如果使用在构造器里的话,就是正被构建的对象实例。例如,如果要添加方法lessThan,测试当前有理数是否小于传入的参数,可以这样写:

class Rational(:Int,d:Int) {
    require(d != 0)
    val number:Int = n
    val denom:Int = d
    override def toString = number + "/" + denom
    def add(that:Rational):Rational = {
        new Rational(number * that.denom + that.number * d,d * that.denom)
    }
    def lessThan(that:Rational) = {
        this.number * that.demon < that.number * this.denom        //注意这里
    }
}

这里,this.number指向lessThan被调用的那个对象的分子。你也可以去掉this前缀而只写number,两种写法意义相同。下面是不能省略this的例子,在Rational类里添加max方法返回指定有理数和参数中的较大者:

class Rational(n:Int,d:Int) {
    require(d != 0)    //先决条件
    val number:Int = n
    val denom:Int = d
    override def toString = number + "/" + denom
    def add(that:Rational):Rational = {
        new Rational(number * that.denom + that.number * d,d * that.denom)
    }
    def lessThan(that:Rational) = {
        this.number * that.denom < that.number * this.denom
    }
    def max(that:Rational) = {
        if(this.lessThan(that)) that else this    //注意这里
    }
}

这里,第一个this可写可不写,写成(lessThan(that))也是一样的,但第二个this必须写,表示要返回的对象。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 206
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
call() bind() apply()

call()和apply() 这两个方法都是函数对象的方法,需要通过函数对象来调用。 当函数调用call()和apply()时,函数都会立即执行。 都可以用来改变函数的this对象的指向。 第一个参数都是this要指...

Halukn
05/24
0
0
关于JavaScript中this的软绑定

首先,什么是软绑定? 所谓软绑定,是和硬绑定相对应的一个词,在详细解释软绑定之前,我们先来看看硬绑定。在JavaScript中,this的绑定是动态的,在函数被调用的时候绑定,它指向什么完全取...

酥风
07/19
0
0
关于 this 你想知道的一切都在这里

无论在 的日常使用中还是前端面试过程中, 的出镜率都极高。这无疑说明了, 的重要性。但是 非常灵活,导致很多人觉得 的行为难以理解。本文从为什么要有 作为切入点,总结了 的六大规则,希...

穿越过来的键盘手
07/10
0
0
JS函数浅析之constructor、prototype属性

函数是JS里很神奇的一位童鞋。那么如何创建一个函数呢?简单来说有下面几种形式: 1、定义式 function a() {} 2、声明式 var a = function() {}; // 把一个匿名函数赋给一个变量 3、构造函数...

冯尚实
2011/09/07
0
0
C++基础知识学习:变量的初始化

C++基本算术类型 类型 含义 最小存储空间 bool 布尔型 - char 字符型 8位 wchar_t 宽字符型 16位 short 短整型 16位 int 整型 16位 long 长整型 32位 float 单精度浮点型 6位有效数字 double...

wqli
2016/05/25
79
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部