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

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


当前回答

Forth可以随时改变数字的基数:

HEX 10 DECIMAL 16 - .
0 Ok

它也不需要是预定义的:

36 BASE ! 1Z DECIMAL .
71 Ok

其他回答

我不敢说XML是一种编程语言,但它不是贴近我们的内心吗?: -)

在我看来,XML中最奇怪的特性是以下是一个格式良好的文档:

<_....>
</_....>

下面是允许连续点的NT-Name的词法定义。

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

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

输出为

primenumber

Perl的sub没有真正的参数列表,只有@_数组。同时,sub会自动变平传入的参数。

我不明白为什么这是一个持久的功能;这反映了几年前我不得不在TI-86 BASIC上做的事情,因为这门语言没有足够的特色。

为什么c#的List<T>.AddRange()不让我添加T的子类型的元素?阀门列表< T > () ! 微软只需要多写一行代码:

public void AddRange<S>(
    IEnumerable<S> collection
) where S : T

在统一中,

GameObject.Find("MyObject")

将正常返回对象。然而,如果你这样做:

GameObject.Find("MyObject").active = false;
//do other stuff
if (GameObject.Find("MyObject").active)
{
    //do stuff
}

然后您将得到一个空引用。在Unity iPhone中,这段代码通常在编辑器中正常工作,但在iPhone上运行时会导致SIGBUS。问题是GameObject.Find()将只定位活动对象,所以即使你只是检查它是否活动,你也会有效地调用if (null.active)。

为了使它正常工作,你必须在使它不活跃之前存储它。

GameObject obj = GameObject.Find("MyObject");
obj.active = false;
//do other stuff
if (obj.active)
{
    //do stuff
}

可以说,这是一种更好的实践,但Unity处理非活动对象的方式通常是相当奇怪的。它似乎卸载了大部分非活动对象(纹理等),但不是全部,因此非活动对象仍然会消耗大量内存。