我想进入更多的模板元编程.我知道SFINAE代表"替换失败不是错误".但是有人能告诉我SFINAE的用处吗?
我经常看到/听到人们说异常应该很少使用,但永远不解释原因.虽然这可能是真的,但理由通常是一种愚蠢:"它被称为例外的原因",对我来说,这似乎是一种不应被一位受人尊敬的程序员/工程师接受的解释.
可以使用异常来解决一系列问题.为什么将它们用于控制流程是不明智的?对它们的使用方式保持格外保守的理念是什么?语义?性能?复杂?美学?惯例?
我之前已经看过一些关于性能的分析,但是在与某些系统相关且与其他系统无关的水平上.
同样,我不一定不同意他们应该在特殊情况下得救,但我想知道共识的理由是什么(如果这样的事情存在的话).
我读过"什么是按位运算符?" ,所以我知道运算符是什么 ,但我还不清楚如何使用它们.任何人都可以提供任何实际的例子,说明位运算符在JavaScript中有用吗?
谢谢.
只是深入研究jQuery源代码,我发现了几个使用按位运算符的地方,例如:(只有&运算符)
// Line 2756:
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
// Line 2101
var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
Run Code Online (Sandbox Code Playgroud) 我有这个C#2.0源代码的摘录:
object valueFromDatabase;
decimal result;
valueFromDatabase = DBNull.Value;
result = (decimal)(valueFromDatabase != DBNull.Value ? valueFromDatabase : 0);
result = (valueFromDatabase != DBNull.Value ? (decimal)valueFromDatabase : (decimal)0);
Run Code Online (Sandbox Code Playgroud)
第一个结果评估抛出,InvalidCastException而第二个结果评估不抛出.这两者有什么区别?
在C#中有一些我无法理解的东西.您可以将超出范围int转换为a enum,编译器不会退缩.想象一下enum:
enum Colour
{
Red = 1,
Green = 2,
Blue = 3
}
Run Code Online (Sandbox Code Playgroud)
现在,如果你写:
Colour eco;
eco = (Colour)17;
Run Code Online (Sandbox Code Playgroud)
编译器认为没问题.还有运行时.呃?
为什么C#团队决定实现这一目标?我认为,在这样的场景中,这个决定忽略了使用枚举的重点:
void DoSomethingWithColour(Colour eco)
{
//do something to eco.
}
Run Code Online (Sandbox Code Playgroud)
在像C#这样的强类型语言中,我想假设它eco总是具有合法Colour价值.但这种情况并非如此.程序员可以调用我的方法,其值为17 eco(如前面的代码片段所示),因此我的方法中的代码不能假定它eco具有合法Colour值.我需要明确地测试它并按照我的要求处理特殊值.为什么是这样?
在我的拙见中,如果编译器在将超出范围int转换为a时发出错误(甚至是警告)消息enum,如果int在编译时已知该值,则会更好.如果没有,运行时应该在赋值语句中抛出异常.
你怎么看?这有什么原因吗?
(注意:这是我在很久以前在我的博客上发布的一个问题,但没有得到任何信息回复.)
我正在计划关于JavaScript的介绍性演讲,在准备过程中,我想知道新秀陷入的最大陷阱是什么.
我知道在我完全理解闭包之前我已经遇到了一些问题,但JavaScript中的许多奇怪行为都不是我想的了......
那么,你应该向新秀指出哪些陷阱?
例如(在C中):
int break = 1;
int for = 2;
Run Code Online (Sandbox Code Playgroud)
为什么编译器必须在所有推断出任何问题,break和for这里的变量?
所以,我们需要关键字,因为
如果查看ECMAScript 3规范,您将看到原始值类型Null和Undefined没有伴随Null和Undefined对象.
>> Null
ReferenceError: Null is not defined
Run Code Online (Sandbox Code Playgroud)
其他原始值类型Number,String和Boolean类型都有伴随的Number,String和Boolean对象,您可以从全局范围引用它们.
>>Number
function Number() { [native code] }
>>Boolean
function Boolean() { [native code] }
Run Code Online (Sandbox Code Playgroud)
这些原始值类型的目的是提供诸如toString和valueOf它们各自的原始值类型的方法:
>>var n = 1;
>>n.toString();
"1"
Run Code Online (Sandbox Code Playgroud)
是相同的
>>var n = 1;
>>Number.prototype.toString.call(n);
"1"
Run Code Online (Sandbox Code Playgroud)
布尔值和字符串也是这样工作的:
>>var b = true;
>>b.toString();
"true"
>>Boolean.prototype.toString.call(b);
"true"
Run Code Online (Sandbox Code Playgroud)
当您尝试混合类型时,您可以看到原始值对象正在使用其伴随对象的方法:
>>Boolean.prototype.toString.call(n);
TypeError: Boolean.prototype.toString is not generic
>>Number.prototype.toString.call(b)
TypeError: Number.prototype.toString is not generic
Run Code Online (Sandbox Code Playgroud)
有趣的是,对于布尔和字符串文字类型,您可以直接从文字中调用这些方法:
>>true.toString();
"true"
>>Boolean.prototype.toString.call(true)
"true"
>>"moo".toString();
"moo"
>>String.prototype.toString.call("moo")
"moo"
Run Code Online (Sandbox Code Playgroud)
原始值为null和undefined,因为它们没有附带的Null和Undefined对象不能执行以下操作:
>>Null
ReferenceError: Null is not defined …Run Code Online (Sandbox Code Playgroud) public class Main {
/**
* @param args the command line arguments */
public static void main(String[] args) {
// TODO code application logic here
int a1 = 1000, a2 = 1000;
System.out.println(a1==a2);//=>true
Integer b1 = 1000, b2 = 1000;
System.out.println(b1 == b2);//=>false
Integer c1 = 100, c2 = 100;
System.out.println(c1 == c2);//=>true
}
}
Run Code Online (Sandbox Code Playgroud)
为什么是b1 == b2虚假和c1 == c2真实的?
所以我今天被问到这个问题.
Integer a = 3;
Integer b = 2;
Integer c = 5;
Integer d = a + b;
System.out.println(c == d);
Run Code Online (Sandbox Code Playgroud)
这个节目打印出来的是什么?它返回true.我回答它总会打印出来,因为我理解自动(和自动联合)拳击.我的印象是,分配整数a = 3将创建一个新的整数(3),以便==将评估参考而不是原始值.
有谁能解释一下?
javascript ×3
autoboxing ×2
c# ×2
c++ ×2
java ×2
.net ×1
c ×1
c#-2.0 ×1
casting ×1
debugging ×1
enums ×1
equivalence ×1
exception ×1
identifier ×1
integer ×1
keyword ×1
sfinae ×1
templates ×1