在Perl中,您可以编写类似
的内容while(!eof){
doSomething(x,y);
print $_;
}
并且第二个语句使用$_
打印出循环的迭代,Perl使用不可见变量的名称来遍历循环。 Java中该变量的名称是什么?
我意识到你可以通过在循环外声明一个变量并递增它来完成同样的事情,但如果有人知道怎么做,这种方式肯定更优雅。
答案 0 :(得分:11)
在Perl中,Java中没有隐式变量。你只需要在Java中更多显式 ......
答案 1 :(得分:4)
Java中没有这样的概念。
在Groovy中,至少可以在函数方法上获得it
变量集。
myList = [1,2,3];
myList.each {
println it
}
或阅读文件,例如你的例子......
new File('test.txt').eachLine {
println it
}
答案 2 :(得分:2)
你错了;在你显示的while循环中,perl不会隐式地对$ _做任何事情。
你要么考虑for / foreach循环,其中$ _是默认的迭代变量,如果你没有指定一个,或者是while的特殊情况,表达式是readline或glob操作,其中赋值为为您添加了$_
。
答案 3 :(得分:-1)
你甚至可以更加隐含:
foreach (<LINE>){
doSomething(x,y);
print; #If you don't specify what to print, it prints "$_"
}
然而,曾经可以接受的是不再可接受的。这很像是在代码中不使用use strict
和use warnings
。不使用这些编译指示允许您执行许多有趣的事情。您可能没有打算做的事情以及使您的代码难以理解的事情。
几乎所有Perl程序员都不再使用隐式$_
和@_
,因为它只会使您的代码更难以理解并且可能导致错误(例如假设while
也使用隐式$_
;-))。
Java(和大多数语言)没有这样的默认变量,因为它并不是那么好的主意。像CPAN和扩展的正则表达式这样的好的Perl想法现在已经被复制到其他语言中。像默认变量这样的东西没有。
使用这些东西可能很有趣 - 就像一个秘密的解码器环,让你知道谁是真正的Perl黑客,谁不是。阅读所有混淆的Perl代码,看看谁真正了解Perl的内部工作原理,这很有趣。
但是,它也为其他语言的开发人员提供了他们所需要的证明,即Perl无可救药地无法理解。结果,Perl受到普遍接受。