与“this”没有类型/差异的显式自引用

2024-02-26

我了解用途显式键入的自引用 http://www.scala-lang.org/node/124:

trait T {
  self : T2 =>
  ...
}

在身体里,self是一个别名this但有更精确的类型T with T2.

现在,我在代码中看到了这一点:

trait T {
  self =>
  ...
}

也就是说,没有附加类型信息的显式自引用。在这种配置下,是否存在以下情况:self不仅仅是一个别名this?


它是一个别名this.

您的第一个示例对于确保特征已混合到适当的类型中很有用,并使这些方法可用。

当您的内部类存在命名冲突时,第二个示例非常有用,可以使外部作用域可见。例如:

trait U {
  self =>
  val name = "outer"
  val b = new AnyRef {
    val name = "inner"
    println(name)
    println(this.name)
    println(self.name)
  }
}

Then new AnyRef with U prints

inner
inner
outer

“self”不是一个特殊的关键字 - 您可以使用“bananas =>”或任何您喜欢的关键字,但它经常按惯例使用。

这种情况在 Swing 中经常出现,您在内部类(滚动窗格中的文本框等)上做了很多工作,这些内部类通常有许多与外部类同名的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与“this”没有类型/差异的显式自引用 的相关文章

  • 带尖括号 (<>) 的方法

    方法名称中是否可以有尖括号 例如 class Foo ind1 Int ind2 Int var v new Foo 1 2 v 1 3 updates ind1 v lt 1 gt 4 updates ind2 真实情况显然比这更复杂 我
  • Spark:如何从spark shell运行spark文件

    我正在使用CDH 5 2 我能够使用火花外壳运行命令 如何运行包含 Spark 命令的文件 file spark 有没有办法在没有 sbt 的情况下在 CDH 5 2 中运行 编译 scala 程序 在命令行中 您可以使用 spark sh
  • Twitter API 与 Scala 2.12 一起使用

    我正在使用 Scala 2 12 使用 SBT 构建 构建 Spark 3 0 0 流应用程序 鉴于所有用于执行此操作的库均适用于 Scala EDIT 我尝试使用库构建时得到的示例输出 object twitter is not a me
  • Play2 的异常无法在 postgresql 上运行

    我发现play2的anorm的行解析器依赖于jdbc驱动程序返回的元数据 所以在play提供的内置示例 zentasks 中 我可以找到这样的代码 object Project val simple get Pk Long project
  • Scala 中的多个类型下限

    我注意到tuple productIterator总是返回一个Iterator Any 想知道是否无法设置多个下限 因此它可能是最低公共超类型的迭代器 我尝试并搜索了一下 但只发现this https stackoverflow com q
  • 在scala中,如何将对象的值转换为Map[String, String]?

    假设我有这门课 case class Test id Long name String 和这个类的一个实例 Test id gt 1 name gt toto 我想创建一个 Map String String 如下 Map id gt 1
  • 如何使用 Apache Livy 设置 Spark 配置属性?

    我不知道在向 Apache Livy 提交 Spark 作业时如何以编程方式传递 SparkSession 参数 这是测试 Spark 作业 class Test extends Job Int override def call jc J
  • 重写继承的构造函数字段时的差异?

    考虑这个简单的 Scala 类 class A val d Int Scala 之间是否存在差异 无论是行为还是生成的字节码 class B d Int extends A d and class B override val d Int
  • idea sbt java.lang.NoClassDefFoundError: org/apache/spark/SparkConf

    我是spark的初学者 我使用 linux idea sbt 构建了一个环境 当我尝试快速启动Spark时 我遇到了问题 Exception in thread main java lang NoClassDefFoundError org
  • SBT - 运行任务来设置SettingKey

    所以我的一般问题是我想根据任务的结果设置版本密钥 但是版本密钥是在任务运行之前设置的 据我了解 一旦设置了键的值 我就无法更改它 因此我无法在我的任务中更改它 我想要做的是将任务作为发布任务的依赖项运行并更改版本的值 我觉得一定有办法做到这
  • Scala 和 Spark:Windows 上的 Dataframe.write._

    有人设法使用 Spark 写入文件 尤其是 CSV 吗 数据框 http spark apache org docs latest api scala index html org apache spark sql Dataset在 Win
  • Scala 方法和高级类型参数

    我试图在 scala 中定义一个方法 它采用通用类型S lt Seq Double 并返回一个 S FixedLoad FixedLoad 是一个具体类型 但我的实现给了我错误 我不明白为什么 尽管我多次尝试去理解参数类型和高级类型 但我的
  • Scala 对大数的阶乘有时会崩溃,有时不会

    以下程序经过编译和测试 有时返回结果 有时充满屏幕 java lang StackOverflowError at scala BigInt apply BigInt scala 47 at scala BigInt equals BigI
  • 在 case 语句中间使用 unapply 的对象

    scala gt object Test def unapply L R v L R Some v defined object Test scala gt 1 2 match case 1 Test 2 gt println First
  • 案例类和案例对象之间的区别?

    我正在学习 Scala 和 Akka 并且在最近的查找中solution https stackoverflow com questions 22770927 waiting for multiple results in akka 我发现
  • 解析嵌套括号内包含的值

    我只是在开玩笑 奇怪地发现在简单的递归函数中解析嵌套括号有点棘手 例如 如果程序的目的是查找用户详细信息 它可能来自 name surname age to Bob Builder age 然后到Bob Builder 20 这是一个用于在
  • 选项包装值是一个好的模式吗?

    我最近写了以下 Scala 代码 val f File pretend this file came from somewhere val foo toFoo io Source fromFile f mkString 我真的不喜欢这种方式
  • 什么是 Java 8“视图”?

    我正在观看 Paul Philips 的演讲 http www youtube com watch v TS1lpKBMkgg http www youtube com watch v TS1lpKBMkgg 在 12 48 比较 Scal
  • 如何设计具有相互依赖的测试的 Specs2 数据库测试?

    有没有一些首选的方法来设计Specs2 http etorreborre github com specs2 测试 有很多测试取决于之前测试的结果 下面 您将找到我当前的测试套件 我不喜欢var位于测试片段之间 不过 它们是 需要的 因为某
  • 清理 IntelliJ 中构建的 Play 框架

    我有一个拼写错误conf routes文件导致 Play Framework 生成错误命名的类 重建项目并运行Invalidate Caches并没有解决 IntelliJ 中的问题 当我手动运行时重新生成了不正确的类文件play clea

随机推荐