Как называется неявная переменная в цикле Java? - PullRequest
7 голосов
/ 19 сентября 2011

В Perl вы можете написать что-то вроде

while(!eof){  
    doSomething(x,y);  
    print $_;  
}

и второй оператор выводит итерацию, до которой используется цикл $_, имя невидимой переменной, которую Perl использует для итерации цикла. Как называется эта переменная в Java?

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

Ответы [ 4 ]

11 голосов
/ 19 сентября 2011

В Java нет неявной переменной, как в Perl.Вам просто нужно быть более явным в Java ...

4 голосов
/ 19 сентября 2011

В Java такого понятия нет.

В Groovy, по крайней мере, вы получаете переменную it для функциональных методов.

myList = [1,2,3];
myList.each {
   println it
}

или для чтения файла, как в вашем примере ...

new File('test.txt').eachLine {
   println it
}
2 голосов
/ 19 сентября 2011

Вы ошибаетесь; Perl неявно ничего не делает с $ _ в цикле while, который вы показываете.

Вы имеете в виду либо циклы for / foreach, где $ _ - переменная итерации по умолчанию, если вы не указали ее, либо особый случай while с выражением, являющимся операцией readline или glob, где присваивание $_ добавлено для вас.

0 голосов
/ 19 сентября 2011

вы можете даже быть более неявным :

foreach (<LINE>){  
    doSomething(x,y);  
    print;   #If you don't specify what to print, it prints "$_"
}

Однако то, что когда-то было приемлемым, больше не приемлемо.Это как если бы вы не использовали use strict и use warnings в своем коде.Неиспользование этих прагм позволило вам сделать так много интересных вещей.Вещи, которые вы, возможно, не собирались делать, и вещи, которые делают ваш код действительно трудным для понимания.

Почти все программисты на Perl больше не используют неявные $_ и @_, потому что это просто делает ваш код всем, чтоболее сложный для понимания и может быть причиной ошибок (например, если предположить, что while также использует неявный $_ ;-)).

Java (и большинство языков) не имеют такой переменной по умолчанию, потому чтоэто не совсем хорошая идея.Хорошие идеи Perl, такие как CPAN и расширенные регулярные выражения, теперь скопированы на другие языки.Такие вещи, как переменные по умолчанию, не имеют.

Использование этого материала может быть забавным - как секретное кольцо декодера, которое позволило вам узнать, кто настоящий Perl-хакер, а кто - нет.Интересно прочитать весь этот запутанный код Perl и посмотреть, кто действительно понимает внутреннюю работу Perl.

Тем не менее, он также дал разработчикам на других языках доказательство того, что Perl безнадежно небрежен и его невозможно понять.,И, как следствие, Perl потерпел всеобщее признание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...