Программа Quine без main () - PullRequest
       20

Программа Quine без main ()

12 голосов
/ 03 февраля 2012

Я натолкнулся на эту небольшую программу для квайнов , написанную без основного метода:

enum f {
  f;
  System z;
  String s="enum f{f;System z;String s=%c%s%1$c;{z.out.printf(s,34,s);z.exit(0);}}";
  {z.out.printf(s,34,s);
  z.exit(0);}
}

Может кто-нибудь объяснить, как это работает?Спасибо.

1 Ответ

9 голосов
/ 03 февраля 2012

Строки 5 и 6 являются инициализатором экземпляра .Он вызывается, когда создается экземпляр класса.Поскольку это enum с одной константой с именем f, он будет создан один раз и будет выполнен блок инициализатора экземпляра.

Обратите внимание, что z равно null, но out являетсястатический член класса System, так что вы можете в любом случае вызвать z.out.printf().Оператор printf принимает строку s в качестве строки формата с двумя аргументами, 34 и s.

34 - это код ASCII для двойной кавычки ".Заполняется для %c и %1$c в строке формата.%s в строке формата заменяется самой строкой формата s.

...