例如:
nil[1] #=> NoMethodError
nil[1]=1 #=> nil
Run Code Online (Sandbox Code Playgroud)
这不仅仅是语法,因为变量也是如此:
a = nil
a[1] #=> NoMethodError
a[1]=1 #=> nil
Run Code Online (Sandbox Code Playgroud)
奇怪:
nil.method(:[]=) #=> NameError
[].method(:[]=) #=> #<Method...>
Run Code Online (Sandbox Code Playgroud)
Ruby 2.3.0p0
在下面的示例中,函数模板 ( quartic
) 使用重载的全局函数 ( square
)。编译时,仅考虑在模板本身之前声明的重载,因此square(int)
使用 so 而不是square(double)
,即使square(double)
在使用模板之前声明也是如此。
int square(int);
template<typename T>
T quartic(T value) {
return square(square(value));
}
double square(double);
double x(double y) {
return quartic(4.0); // Uses square(int), wanted square(double)
}
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以根据square
使用模板时可用的内容来决定哪个重载版本,以便用户可以实现他使用的square
任何类型?T
注意:奇怪的是,MSVC 将使用square(double)
,而 GCC、clang 和 icc 使用square(int)
。