文档章节

函数式对象之自指向

柳哥
 柳哥
发布于 2014/06/06 15:46
字数 300
阅读 46
收藏 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必须写,表示要返回的对象。

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 203
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

spring 事件

ContextRefreshedEvent Event raised when an {@code ApplicationContext} gets initialized or refreshed. ContextClosedEvent Event raised when an {@code ApplicationContext} gets clos......

Canaan_
38分钟前
1
0
leetcode两数之和

leetcode中求两数之和解决方法 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。 给定 nums = [2, 7, 11, ...

lar555
55分钟前
1
0
js实现限制网页内容复制

转载 在我们做的网页发到网上后,如果访客看到比较喜欢的内容,只要复制就可以变为自己的,自己辛辛苦苦弄半天还不及人家的一下复制,有时为了只让访客看到,而不能让它们复制内容,就用Jav...

lc_comeon
59分钟前
1
0
jenkins将spring boot项目发布到阿里云镜像中

1、spring boot项目 1.1 pom.xml配置 <artifactId>xxx-docker</artifactId><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.......

xixingzhe
今天
0
0
qsv格式可以在电视上播放吗

  大家都知道qsv格式是爱奇艺的独家缓存格式,是加密的,一般的播放器是无法播放的,只能在爱奇艺播放器上播放,如果想要在电视上播放,就必须要安装爱奇艺播放器,比较麻烦。其实还有一种...

萤火的萤火
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部