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

时间:2015-07-23 09:19:53

标签: perl

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

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

Powershell - 应该与Perl非常相似。

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

Scala - 将_变量作为通用lambda参数。

Lisp - 具有照应宏。

HyperTalk和AppleScript - 请参阅@AmbroseChapel answer

3 个答案:

答案 0 :(得分:7)

我建议而不是寻找“默认”变量,而是根据隐式变量来考虑它。那些更为常见。

如果你看一下例如awk sed grep等等 - 他们将魔法应用于“当前行”。

E.g。

sed -e 's/fish/paste/g' myfile

隐式迭代 myfile,并且每行应用一次模式。

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

perl -p -e 's/fish/paste/g' myfile

如果您将其解析,请将其转换为:

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

Perl只是更多......明确它的隐含性。我的意思是,一旦你开始在while循环中“设置”一个隐式变量,那么从那里开始for循环是有意义的。

我会敦促谨慎 - 我喜欢$_但我不喜欢它 - 我觉得如果我真的是,那么我通常最好改为命名变量。

与编程一样 - 特别是perl - 可读性和清晰度是王道。

我认为能够写作;

 my $regex = qr/some_pattern/;

 while ( <STDIN> ) {
    print if m/$regex/;
 }

比以前更清楚:

while ( my $line = <STDIN> ) { 
    if ( $line =~ m/some_pattern/ ) { 
        print $line;
     }
}

答案 1 :(得分:1)

Scala有类似$ _的东西,例如

列表(1,2,3)地图(_ + 2)

答案 2 :(得分:1)

我唯一知道的是HyperTalk,这是Apple稍微不寻常的开发环境HyperCard的语言,它有it作为默认或隐式变量。你可以做点什么

get the length of <something>
put it into myVariable

此类编程也可以在AppleScript中完成,请参阅the "it" and "me" keywords