加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala这个别名和自我类型

发布时间:2020-12-16 10:02:18 所属栏目:安全 来源:网络整理
导读:这个别名和自我类型之间有什么关系吗? 这种别名是自我类型的特例吗? 在 scala 2nd P776的编程中,作者说: abstract class Parser[+T] extends … { p = You saw syntax like this in Section 29.4,where it was used to give a self type to a trait. 但是
这个别名和自我类型之间有什么关系吗?
这种别名是自我类型的特例吗?
在 scala 2nd P776的编程中,作者说:

abstract class Parser[+T] extends … { p =>

You saw syntax like this in Section 29.4,where it was used to give a
self type to a trait.

但是,self类型的语法看起来不像这样,它就像:

this:SomeAssumedType =>

另一个问题是为什么这种混叠有用?我不明白给这个引用添加别名是有意义的,因为它已经是当前对象引用的传统别名,但是在Play框架源代码中,我看到了很多代码(特别是anorm部分),如:

trait RowParser[+A] extends (Row => SqlResult[A]) {

parent =>

为什么这有意义?

解决方法

您可以同时拥有自我类型和此别名:

abstract class Parser[+T] { p: SomeAssumedType => … }

如果您不包含类型归属,Scala将假定变量的类型是周围类的类型,因此为您提供了一个简单的别名.

如果将此名称与ascription一起保留,则Scala希望您以能够实现归属的方式初始化此类.

至于这个别名.以下是需要这种情况:

object OuterObject { outer =>
  val member = "outer"
  object InnerObject {
    val member = "inner"
    val ref1 = member
    val ref2 = this.member
    val ref3 = outer.member

    def method1 = {
      val member = "method"
      member
    }
    def method2 = {
      val member = "method"
      this.member
    }
    def method3 = {
      val member = "method"
      outer.member
    }
  }
}

scala> OuterObject.InnerObject.ref1
res1: java.lang.String = inner

scala> OuterObject.InnerObject.ref2
res2: java.lang.String = inner

scala> OuterObject.InnerObject.ref3
res3: java.lang.String = outer

scala> OuterObject.InnerObject.method1
res4: java.lang.String = method

scala> OuterObject.InnerObject.method2
res5: java.lang.String = inner

scala> OuterObject.InnerObject.method3
res6: java.lang.String = outer

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读