2016-08-14 2 views
1

Я написал этот пример и был очень удивлялся:Расширения класса в единственном объекте

class TestMatch(val i: Int) 

object TestMatch extends TestMatch(10){ // <-- Here 
    def apply(i: Int) = new TestMatch(i) 
    def unapply(tm : TestMatch): Option[Int] = Some(tm.i) 
} 

Что здесь происходит? Мы распространяем TestMatch(10). Как мы можем расширить тестовое соответствие экземпляра f, созданное с помощью i = 10? Это не имеет большого значения для меня. Или TestMatch(val i: Int) определяет набор типов вместо одного типа. Как шаблона в C++:

template<int i> 
class TestMatch{ 
    //... 
} 

Я consufed объектом линии

TestMatch расширяет TestMatch (10)

Похоже, мы расширим TestMatch(10), который я думал, был объектом тип TestMatch, созданный с помощью параметра construcotr i = 10. Если я написал

TestMatch extends TestMatch 

он не скомпилировал.

+0

Не могли бы вы разъяснить свой вопрос? Непонятно, что вы хотите объяснить. –

ответ

2

Вы не распространяете экземпляр класса TestMatch. Синтаксис ниже просто передается в параметры конструктора базовому классу.

object TestMatch extends TestMatch(10) 
+0

Что это значит? Таким образом, мы фактически расширяем TestMatch, но также сообщаем компилятору передать 10 во время создания объекта singleton. Верный? – stella

+0

Да, это правильно. – Samar