为什么在自我引用中使用self而不是this?
为什么在自我引用中使用self而不是this?
我理解在下面的代码中self type的结果是什么:
trait SpellChecker { self: RandomAccessSeq[char] => ... }
来源:http://www.markthomas.info/blog/92
但是我不明白为什么在这里使用self
而不是this
会更好...!? 另外,如果我将self
替换为asfd
,编译器也不会报错...所以我不太确定"self"的作用是什么。我没有看到在trait的一个方法中可以像使用对象一样使用self
。
在这种特殊情况下,重新命名this
没有意义。当你在嵌套情况下重新命名外部的this
并在嵌套的模板/对象中访问它时,这种做法才更有意义。
为什么要使用self
而不是this
作为自我引用?这个问题的出现主要原因是为了避免命名冲突。在某些编程语言中,this
是一个特殊的关键字,用于引用当前对象的实例。然而,在某些情况下,我们可能需要在嵌套结构中使用多个this
引用不同的对象实例,这就导致了命名冲突的问题。
为了解决这个问题,我们可以使用self
关键字来代替this
。相比之下,self
是一个更通用的关键字,可以用于引用任何对象的实例,而不仅仅是当前对象。通过使用self
,我们可以避免命名冲突的问题,并且更清晰地表达我们的意图。
总结而言,使用self
而不是this
作为自我引用的主要原因是为了避免命名冲突。通过使用self
,我们可以更清晰地表达我们的意图,并且在嵌套结构中可以更灵活地引用不同的对象实例。
为什么在自我引用中使用self而不是this?
在上述示例中,使用self作为SpellChecker实例的别名。这在存在嵌套结构(如类)时非常有用。如果要引用外部元素,则可以使用别名。而使用this表示没有别名,因此this: Example =>表示“我不需要一个别名来表示this,我只是想确保this与Example混合在一起”。你还可以随意命名别名,asfd和iLikeFries一样好。self只是一种约定俗称的写法。
所以,实际上我混合了两个东西:self的自我引用别名和继承规定?在你的示例中,你没有给出任何继承规定,对吗?你只是给this起了个别名,对吗?
正确。不是你混淆了这两个概念,而是这两个概念是你可以使用自我类型注释实现的两个功能:1)为this创建一个别名,2)确保trait只能与一些所需类型混合使用。你可以选择其中一种,或同时使用两种。你的问题主要是关于别名部分。