在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
当前回答
Perl有yada yada操作符(…)。
Perl 6传统的所谓“yada yada”操作符是标记未实现代码的快捷方式:
if ($condition) { ... }
和
if ($condition) { die "not yet implemented" }
其他回答
在JavaScript中,void不是关键字,不是类型声明,也不是变量名,也不是函数,也不是对象。Void是一个前缀操作符,类似于-、——、++和!你可以给任何表达式加上前缀,这个表达式的值将是undefined。
它经常被用在bookmarklet和内联事件处理程序中,比如下面这个比较常见的例子:
<a href="javascript:void(0)">do nothing</a>
在这个例子中使用它的方式使它看起来像一个函数调用,而实际上它只是一种获得原始未定义值的过于聪明的方法。大多数人并没有真正理解JavaScript中void的真正本质,这可能会导致许多讨厌的bug和奇怪的意想不到的事情发生。
不幸的是,我认为void操作符是在JavaScript中获得未定义值的唯一真正保证的方法,因为未定义,正如在另一个回答中指出的,是一个可以重新赋值的变量名,而{}。a可以被Object.prototype.a = 'foo'打乱
更新:我想到了另一种生成undefined的方法:
(function(){}())
嗯,有点啰嗦,返回“undefined”是它的目的就更不清楚了。
Ruby
时间。Parse经常假装解析没有失败,而是返回现在
require 'time'
Time.parse '2000-01-01 12:00:00'
# -> 2000-01-01 12:00:00 +0100
Time.parse '2000-99-01 00:00:00'
# -> ArgumentError: argument out of range ...
Time.parse 'now'
# -> 2010-08-13 21:26:13 +0200
Time.parse 'yesterday'
# -> 2010-08-13 21:26:18 +0200
Time.parse 'billion years ago'
# -> 2010-08-13 21:26:37 +0200
c++模板可以用来做一些奇怪的事情,最好的例子是“多维模拟字面量”,它使用模板来计算“绘制”形状的面积。下面的代码对于3x3矩形是有效的c++代码
#include"analogliterals.hpp"
using namespace analog_literals::symbols;
unsigned int c = ( o-----o
| !
! !
! !
o-----o ).area;
再举一个3D立方体的例子:
assert( ( o-------------o
|L \
| L \
| L \
| o-------------o
| ! !
! ! !
o | !
L | !
L | !
L| !
o-------------o ).volume == ( o-------------o
| !
! !
! !
o-------------o ).area * int(I-------------I) );
闲聊:
在类Test中有一个类方法,返回一个常量字符串:
method1
^ 'niko'
无论发生什么,这个方法都会不断返回字符串'niko'。但事实并非如此。
s := Test method1
(设置为“niko”。)
s at: 4 put: $i.
(设置为“niki”。)
s := Test method1
(再次设置为“niki”。)
因此,第二行代码永久地将method1更改为返回'niki'而不是'niko',即使方法的源代码没有更新。
在C中,a[b][C]与C [b[a]]完全相同。