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

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


当前回答

我一直是PHP错误的忠实粉丝,当在一行中使用两个冒号时脱离上下文:

解析错误:语法错误,第3行/path/to/file/error.php中的T_PAAMAYIM_NEKUDOTAYIM异常

第一次遇到这种情况时,我完全被弄糊涂了。

其他回答

我有点纠结:

1;

在perl中,模块需要返回true。

С#:

var a = Double.Parse("10.0", CultureInfo.InvariantCulture); // returns 10
var b = Double.Parse("10,0", CultureInfo.InvariantCulture); // returns 100

在不变区域性中,逗号不是小数点符号,而是组分隔符。

据我所知,对于一些地区的新手程序员来说,这是一个常见的错误。

在c++中,你可以做:

std::string my_str;
std::string my_str_concat = my_str + "foo";

但你不能:

std::string my_str_concat = "foo" + my_str;

操作符重载通常服从WTF。

VBScript中的括号标识符

VBScript有所谓的方括号标识符,这些标识符定义在方括号中,如下所示:

[Foo]

实际上,它们非常方便,因为它们允许您以保留字命名变量和例程,调用第三方对象的方法,其名称是保留字,并且还可以在标识符中使用几乎任何Unicode字符(包括空格和特殊字符)。但这也意味着你可以和他们一起玩:

[2*2] = 5

[Здравствуй, мир!] = [Hello, world!]

[] = "Looks like my name is an empty string, isn't that cool?"

For[For[i=0]=[0]To[To[To[0]
  [Next[To]([For[i=0])=[For[i=0]
Next

另一方面,括号标识符可能是一个陷阱,以防你在这样的语句中忘记引号:

If MyString = "[Something]" Then

因为If MyString = [Something] Then是一个完全合法的语法。(这就是为什么必须使用具有语法高亮显示功能的IDE !)

更多关于括号标识符的信息,请参阅Eric Lippert的博客:

VBScript琐事:括号标识符和保留字不兼容 VBScript测试答案,第六部分

在MAXScript中,所有操作符都是平等对待的。因此,a = b +c使a等于b,然后计算a+c的和,并丢弃结果。