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

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


当前回答

一般来说,弱类型。

C:

printf("%c\n", 'a' + 3);

PHP:

echo 5 + "3";

还有太多其他语言。

其他回答

闲聊:

在类Test中有一个类方法,返回一个常量字符串:

method1
    ^ 'niko'

无论发生什么,这个方法都会不断返回字符串'niko'。但事实并非如此。

s := Test method1 

(设置为“niko”。)

s at: 4 put: $i.

(设置为“niki”。)

s := Test method1

(再次设置为“niki”。)

因此,第二行代码永久地将method1更改为返回'niki'而不是'niko',即使方法的源代码没有更新。

Go的伪常数Iota:

type ByteSize float64
const (
_ = iota;   // ignore first value by assigning to blank identifier
KB ByteSize = 1<<(10*iota); MB; GB; TB; PB; YB;
)   

在Python中:

i = 1
++i
print i

输出“1”。行'++i'的计算结果为+(+i) (Python不支持增量操作符)

在PHP中

var_export('false' == 0);       // true

var_export('false' == true);    // true

var_export('false' == false);   // false

EDIT

正如@Kobi提到的,这可能发生,因为语言将任何值解释为“TRUE”,除了“FALSE”,但在PHP中不是这样,在那里事情比你想象的更奇怪!

这个案例在PHP手册的“字符串转换到数字”一章中有完整的记录,它说:

如果字符串以valid开头 数值数据,这就是值 使用。否则,该值为0 (零)。

这里有一个例子:

print (int) 'zero';    // 0
print (int) 'false';   // 0
// but
print (int) '1 - one'; // 1

附注:我认为这种隐式类型转换弊大于利。

早期的FORTRAN,空格不重要。(anti-Python !)

DO 20 I = 1, 10

含义:从这里循环到第20行,I从1到10。

DO 20 I = 1. 10

含义:将1.10分配给名为DO20I的变量。

有传言说这个漏洞毁了一个太空探测器。