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

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


当前回答

在Perl中,对象只是被祝福的引用,所以在运行时改变对象的类是小菜一碟:

package Foo;
sub new { bless {}, $_[0] }
package Bar;
package main;
my $foo = Foo->new;
ref($foo); # => "Foo"
bless $foo, 'Bar';
ref($foo); # => "Bar"

我很惊讶其他语言不能做到这一点。多么有用的功能啊!

其他回答

我喜欢这类东西在JavaScript中很好的事实:

var futureDate = new Date(2010,77,154);
alert(futureDate);

结果是距离2010年第0个月的第0天77个月零154天,即2016年11月1日

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

这是我的两分钱。在c++中:

int* t = new int(15);
delete t;

在(MRI/C) Ruby和MacRuby(而不是JRuby)中,整洁的系统相关溢出会导致年份翻转,然后出现更大数量的本地时间错误。这不是一个常见的问题,但很奇怪:

$ ruby -version
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ irb
>> Time.at(67767976233550799)
=> Tue Dec 31 23:59:59 -0500 2147483647
>> Time.at(67767976233550800)
=> Wed Jan 01 00:00:00 -0500 -2147483648
>> Time.at(67768036191694799)
=> Wed Dec 31 23:59:59 -0500 -2147481749
>> Time.at(67768036191694800)
ArgumentError: localtime error
...
Maybe IRB bug!!

不过,这可能特定于64位环境。

s a=“a=”“a=”a“”,@a=“”“”2N“”“”,a=“c=”_(“”22“”?@a),@a“”,@a,a=“a”“,a(c)=”“S+”“_c,e=$T(@@a@(c))”,@a

这是COS (cache objectscript)中很好的一行代码。有趣的是,这里有5种不同的代码-间接*G模式