为什么在自我引用中使用self而不是this?

11 浏览
0 Comments

为什么在自我引用中使用self而不是this?

我理解在下面的代码中self type的结果是什么:

trait SpellChecker {
  self: RandomAccessSeq[char] =>
  ...
}

来源:http://www.markthomas.info/blog/92

但是我不明白为什么在这里使用self而不是this会更好...!? 另外,如果我将self替换为asfd,编译器也不会报错...所以我不太确定"self"的作用是什么。我没有看到在trait的一个方法中可以像使用对象一样使用self

0
0 Comments

在这种特殊情况下,重新命名this没有意义。当你在嵌套情况下重新命名外部的this并在嵌套的模板/对象中访问它时,这种做法才更有意义。

为什么要使用self而不是this作为自我引用?这个问题的出现主要原因是为了避免命名冲突。在某些编程语言中,this是一个特殊的关键字,用于引用当前对象的实例。然而,在某些情况下,我们可能需要在嵌套结构中使用多个this引用不同的对象实例,这就导致了命名冲突的问题。

为了解决这个问题,我们可以使用self关键字来代替this。相比之下,self是一个更通用的关键字,可以用于引用任何对象的实例,而不仅仅是当前对象。通过使用self,我们可以避免命名冲突的问题,并且更清晰地表达我们的意图。

总结而言,使用self而不是this作为自我引用的主要原因是为了避免命名冲突。通过使用self,我们可以更清晰地表达我们的意图,并且在嵌套结构中可以更灵活地引用不同的对象实例。

0
0 Comments

为什么在自我引用中使用self而不是this?

在上述示例中,使用self作为SpellChecker实例的别名。这在存在嵌套结构(如类)时非常有用。如果要引用外部元素,则可以使用别名。而使用this表示没有别名,因此this: Example =>表示“我不需要一个别名来表示this,我只是想确保this与Example混合在一起”。你还可以随意命名别名,asfd和iLikeFries一样好。self只是一种约定俗称的写法。

所以,实际上我混合了两个东西:self的自我引用别名和继承规定?在你的示例中,你没有给出任何继承规定,对吗?你只是给this起了个别名,对吗?

正确。不是你混淆了这两个概念,而是这两个概念是你可以使用自我类型注释实现的两个功能:1)为this创建一个别名,2)确保trait只能与一些所需类型混合使用。你可以选择其中一种,或同时使用两种。你的问题主要是关于别名部分。

0