自身类型(self type)

看scala的源码的话很发现很多源码开头都有一句:self => 这句相当于给this起了一个别名为self

class Self {
    self =>   //代表this指针  ,也就是说 self 就 this的别名
    val tmp = "scala"
    def foo = self.tmp + this.tmp
}

self不是关键字,可以用除了this外的任何名字命名(除关键字)。就上面的代码,在Self 内部,可以用this指代当前对象,也可以用self指代,两者是等价的。

self type 两种使用场景

一、 用在有内部类的情况

如:

    class Outer {
      out =>
      val v1= "spark"

      class Inner {
        println(out.v1) // 用outer表示外部类,相当于Outer.this
        v1
      }
    }

二、 对子类(或者对象)的约束

trait S1

/**
 * this 不能称当别名,这里this:S1 是一个整体,就是说实例化S2时,要求S1必须混入
 */
class S2 {this:S1 =>}  // 混入trait S1,强制要求 S2的实现类 去实现 S1
class S3 extends S2 with S1

trait T {this:S1 => }
object S4 extends T with S1

this:S1 => 要求S2在实例化时或定义S2的子类时,必须混入指定的S1 类型,这个X类型也可以指定为当前类型

自身类型的存在相当于让当前类变得“抽象”了,它假设当前对象(this)也符合指定的类型,因为自身类型 this:S1 =>的存在,当前类构造实例时需要同时满足S1类型

写的不对的地方,烦请指点

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Comptype 是一个用于比较对象的库,它提供了一种简单的方式来定义和比较对象的类型。使用 Python Comptype,你可以轻松地定义自己的对象类型,并实现对象之间的比较。 下面是使用 Python Comptype 的步骤: 1. 安装 Comptype:首先,你需要安装 Comptype 库。你可以使用 pip 命令来安装它,命令如下: ``` pip install comptype ``` 2. 导入 Comptype:在你的 Python 脚本中,导入 Comptype 模块,命令如下: ```python import comptype ``` 3. 定义对象类型:使用 Comptype,你可以定义自己的对象类型。你可以通过创建一个类,并继承 Comptype 类来定义对象类型。在类中,你需要实现 `__eq__` 方法来定义对象之间的相等性比较。例如: ```python class Person(comptype.Comptype): def __init__(self, name, age): self.name = name self.age = age def __eq__(self, other): return self.name == other.name and self.age == other.age ``` 4. 创建对象并比较:现在,你可以创建 Person 类的对象,并使用 `==` 运算符来比较它们的相等性。例如: ```python person1 = Person("Alice", 25) person2 = Person("Bob", 30) if person1 == person2: print("person1 and person2 are equal") else: print("person1 and person2 are not equal") ``` 在上面的例子中,`person1` 和 `person2` 对象的相等性比较是通过 `__eq__` 方法来实现的。 这就是使用 Python Comptype 的基本步骤。通过定义自己的对象类型,并实现相等性比较方法,你可以使用 Comptype 来比较对象的类型。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值