risc-v中文社区

 找回密码
 立即注册
查看: 978|回复: 0

[经验] scala的this.type

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-11 09:44:21 | 显示全部楼层 |阅读模式
class A { def m1:A = this}
class B extends A {def m2:B = this}
val b = new B
如果b.m2.m1是可以的,但b.m1.m2则不行,因为m1返回的是A类型,
当然可以在B中override def m1,但麻烦,这种情况采用this.type:
class A{def m1:this.type = this}
class B extends A{def m2:this.type=this}
val b = new B
b.m2.m1肯定可以,b.m1.m2分析:
scala中任何类对象都有type属性,它的值其实就是类的实例化对象即this,
b.m1返回的是this.type,所以返回的是B类的对象实例,当然再用这个B类去调用
m2当然是OK的。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-29 10:10 , Processed in 0.016088 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表