2015-07-09 4 views
0

Я создал класс ApplyDemo с частным construtor вприменять метод в классе компаньон не печатает вывод на консоль

class ApplyDemo private{ 
    override def toString()="ApplyDemo" 
} 

Я создал сопутствующий объект класса, как

object ApplyDemo 
{ 
    def apply()={ 
      Console.println("calling Apply"); 
      new ApplyDemo 
     } 
} 

Теперь я создал основной класс приложения как:

object MainApp extends App{ 

     val a=ApplyDemo; 
     Console.println(a); 
} 

для любопытства куколка Я положил инструкцию println в методе применения. но это не называется. Мне просто интересно узнать, почему println не называется.

P.S. как класс и компаньон в одном файле

Благодаря

+3

Выполнив 'ApplyDemo()' (который вызывает по умолчанию '.Не()' метод) вы должны увидеть вывод 'println'. – bjfletcher

+1

Если у вас нет кода, который вы нам не показали, там нечего называть 'apply' ... –

+0

@bjfltecher: есть ли разница в ApplyDemo() и просто ApplyDemo в этом случае, потому что в scala docs i обнаружили, что мы можем оставить скобки – optional

ответ

0

Я был в состоянии получить ответ на лестнице РЕПЛА: Expression:

val a= ApplyDemo 

является назначение типа ApplyDemo к переменному а и Скале РЕПЛ говорит:

a: ApplyDemo.type = [email protected] 

и выражение

val a= ApplyDemo() 

вызывает метод применения в классе компаньона, а repl говорит.

вызова Применить
a1: ApplyDemo = ApplyDemo

Благодаря bjfletcher