0

(试图通过探索边界来理解自我类型的使用。)

这不能被实例化(D 和 String 是类,但必须混合其中之一。加上 String 是最终的。)。但它还有其他用途吗?

class D { 
    foo: String => 
    def f2 = foo.substring(1) 
}

更新:对不起,我似乎不擅长提问。我想知道的是这种奇怪的特殊情况是否有意义。D类永远无法实例化的情况,如1。我不能混入String,因为它不是tarit。2. 我不能混入 D,因为 .. 3. 我不能扩展 String,因为它是最终的。

4

2 回答 2

5

self 类型注解一般有两个目的:

  1. 强制执行某个基类/特征并确保您的类或特征只能由该类型继承或混合到该类型中,并且
  2. 实现内壳时参考外壳。(如果不是这种语法,“this”指的是什么?)

我不确定我是否理解您的示例或其背后的原因。精心制作的?

于 2013-11-06T20:14:04.433 回答
4
trait Table
trait Desert
trait Meal

class Pancake extends Desert
class Spaghetti extends Meal
class Woodentable extends Table

假设您想确保现有的 Class 混合在您使用的那些依赖项中:

trait Restaurant {
self: Table with Desert with Meal =>
def foo():Unit ...
}

现在,在 Restaurant 中混合的每个类(或特征)都必须提供以下依赖项。例如,这用于蛋糕图案。如果这些依赖项中的任何一个不存在,编译器将在编译时抱怨。

于 2013-11-06T20:39:18.103 回答