在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?

请每个回答只回答一个特征。


当前回答

在Java中,

String s = null;
System.out.println(s + "hello");

输出“nullhello”。

其他回答

Perl的$[(已弃用),这在之前关于通用Perl变量的另一篇文章中提到过,但它值得特别提到,并有更好的解释。对$[的更改仅限于当前范围。更多的信息以及如何使用它的含义;)可以在$[中找到,请访问http://www.perlmonks.org/index.pl/?node_id=480333

Tcl中的连接是将两个字符串添加为一个字符串:

set s1 "prime"
set s2 "number"
set s3 $s1$s2
puts s3

输出为

primenumber

在PHP中,字符串字母不能像在C中那样使用,你需要使用ord()和chr()来将数字转换为字符,反之亦然:"a" != 97,但ord("a") == 97。

不过,有一个例外:

for ($i = 'a'; $i < 'z'; $i++) {
    print "$i ";
}

将打印字母a到y,就像你所期望的,就像它是C风格的数据类型一样。

但是,如果将测试条件更改为<=,它将不会像您想象的那样输出a到z,而是输出a到yz!(共打印676项)

同样,如果您将676项列表中“z”后面的“z”更改为“aa”,并再次将测试条件更改为<,您将只看到“a”被打印出来!不是像你想的那样从a到z。

如果你将增量变量改为$i+=2,它将再次只打印“a”!唯一的方法是按顺序使用$i++, $i++,现在它像预期的那样工作。

尽管如此,这是PHP中输出字母a-z组合的好方法,尽管实际使用起来非常困难。

2000年Perl Journal's obfusated Perl Contest的最佳参赛作品:

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while(<Q>){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/\|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"\n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

代码由作者在http://mysite.verizon.net/les.peters/id2.html详细解释

Java的Integer类的基转换静态方法。P似乎很少有语言内置了这个功能。