除了Perl之外还有其他语言的默认变量吗?

Dan*_*nov 4 perl

我最近了解了Perl的默认变量$_.关于主题的好文章在这里http://perlmaven.com/the-default-variable-of-perl.我发现能够将函数应用于它而不指定令人着迷的参数.还有其他类似设施的编程语言吗?

编辑:评论中列出的一些语言是:

Powershell - 应该与Perl非常相似.

Groovy - 具有泛型it迭代器变量.

Scala - 具有_变量作为通用lambda参数.

Lisp - 具有照应宏.

HyperTalk和AppleScript - 请参阅@AmbroseChapel的回答

Sob*_*que 7

我建议而不是寻找一个"默认"变量,而是根据隐式变量来考虑它.那些更为常见.

如果你看一下,awk sed grep等等 - 他们将魔法应用于'当前线'.

例如

sed -e 's/fish/paste/g' myfile
Run Code Online (Sandbox Code Playgroud)

将隐式迭代 myfile,并在每行应用一次模式.

我认为这是perl中出现的 - 因为perl让你模仿sed:

perl -p -e 's/fish/paste/g' myfile
Run Code Online (Sandbox Code Playgroud)

如果你解析了这个,你把它变成:

LINE: while ( defined ( $_ = <ARGV> ) ) {
    s/fish/paste/g;
} 
continue { 
    die "-p destination: $!\n" unless print $!;
}
Run Code Online (Sandbox Code Playgroud)

Perl只是更多......明确它的隐含性.我的意思是,一旦你开始在一个while循环中"设置"一个隐式变量,那么从那里循环就可以了for.

我会敦促谨慎 - 我喜欢,$_但我不喜欢它 - 我觉得如果我真的是,那么我通常会更好地命名一个变量.

与编程一样 - 尤其是perl- 可读性和清晰度是最重要的.

我认为能够写作;

 my $regex = qr/some_pattern/;

 while ( <STDIN> ) {
    print if m/$regex/;
 }
Run Code Online (Sandbox Code Playgroud)

更清楚:

while ( my $line = <STDIN> ) { 
    if ( $line =~ m/some_pattern/ ) { 
        print $line;
     }
}
Run Code Online (Sandbox Code Playgroud)