我对有条件的操作符有点困惑。 考虑以下两行: Float f1 = false? 1.0f: null; Float f2 = false? 1.0f: false? 1.0f: null; 为什么f1变成空,第二个语句抛出一个NullPointerException? Langspec-3.0 para 15.25 sais: 否则,第二个和第三个操作数分别是S1和S2的types。 假设T1是将装箱转换为S1所得到的types,并设T2是将装箱转换为S2所得到的types。 条件expression式的types是将采集转换(§5.1.10)应用于lub(T1,T2)(§15.12.2.7)的结果。 那么对于false?1.0f:null T1是Float,T2是nulltypes。 但是lub(T1,T2)的结果是什么? 这段15.12.2.7只是有点太… 顺便说一句,我在Windows上使用1.6.0_18。 PS:我知道Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; Float f2 = false? (Float) 1.0f: false? (Float) 1.0f: null; 不扔NPE。
在阅读这篇贴在dzone上的文章时,我发现了由Marcus Lagergren最初在Twitter上发布的一段JavaScript代码。 下面的代码显然打印string"fail" (![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]; 这涉及到隐式types转换,我试图理解这条线是如何解释的。 我已经隔离每个字符 (![]+[])[+[]]打印"f" (![]+[])[+!+[]]打印"a" ([![]]+[][[]])[+!+[]+[+[]]]打印"i" (![]+[])[!+[]+!+[]]打印"l" 我也设法分解expression式,从"i" 字母"f" ![]一个空数组是一个对象,根据ECMAScript文档,点9.2在转换为boolean时计算为true ,所以这是false false+[]按照第11.6.1节二进制+运算符的两个参数都被转换为String,因此我们得到"false"+"" ,其结果为"false" +[]一个加号运算符会导致一个ToNumber转换,如果该参数是一个Object则会进行ToPrimitive转换。 这种转换的结果是通过调用对象的[[DefaultValue]]内部方法来确定的。 如果数组为空,则默认为0 。 (ECMAScript文档,章节: 11.4.6,9.3,9.1 ) "false"[0]我们访问索引为0的字符,因此"f" 字母"a" 同样的故事,这里唯一的区别是方括号内的部分(通过使用一元+和! )触发的额外的转换(通过计算一个数字来指向string"false"中的另一个字符) ! 运营商。 如上所述, +[]计算结果为0 。 如第9.2 节和第11.4.9 节中定义的那样, !0评估为true 。 首先,将0转换为布尔值false ,然后运算符将该值反转。 +true再次为+true ,一元正则触发一个ToNumber转换,它返回一个1表示二进制true ( Section 11.4.6 and 9.3 ) "false"[1]返回string中的第二个字符,即"a" 字母“l” !+[]计算结果如上所述 使用基元上的二进制+ true+true触发ToNumber转换。 如果是,则结果是1+1等于2 "false"[2] – […]
有没有办法将字符转换为C中的整数? 例如,从'5'到5?
为什么大pandas告诉我,我有对象,尽pipe选定列中的每个项目都是一个string – 即使在显式转换之后。 这是我的DataFrame: <class 'pandas.core.frame.DataFrame'> Int64Index: 56992 entries, 0 to 56991 Data columns (total 7 columns): id 56992 non-null values attr1 56992 non-null values attr2 56992 non-null values attr3 56992 non-null values attr4 56992 non-null values attr5 56992 non-null values attr6 56992 non-null values dtypes: int64(2), object(5) 其中五个是dtype object 。 我明确地将这些对象转换为string: for c in […]
在编写HTML5文档时,什么是正确的方法? <!DOCTYPE html> 要么 <!doctype html>
你有什么恐怖的故事要讲? GCC手册最近增加了一个关于“严格别名”和通过工会投射指针的警告: […]考虑地址,转换结果指针和解引用结果具有未定义的行为 [强调添加],即使转换使用联合types,例如: union a_union { int i; double d; }; int f() { double d = 3.0; return ((union a_union *)&d)->i; } 有没有人有一个例子来说明这个未定义的行为? 注意这个问题不是关于什么C99标准说或不说。 这是关于今天gcc和其他现有编译器的实际function。 我只是猜测,但是一个潜在的问题可能在于将d设置为3.0。 因为d是一个永远不会被直接读取的临时variables,并且永远不会通过“有点兼容的”指针读取,所以编译器可能不费心去设置它。 然后f()会从栈中返回一些垃圾。 我简单,天真,尝试失败。 例如: #include <stdio.h> union a_union { int i; double d; }; int f1(void) { union a_union t; td = 3333333.0; return ti; // gcc […]
有人可以向我解释为什么 @Override public void fooMethod(Class<?> c) 不会覆盖 public void fooMethod(Class c) 并给我以下错误,而不是: – 名称冲突:方法fooMethod(Class <?>) typesSubClass与fooMethod(Class)的擦除次数相同 键入SuperClass但不覆盖它 – types的方法fooMethod(Class <?>) 子类必须重写一个超类方法 ? 编辑: “ java -version ”说Java(TM)2运行时环境,标准版(版本1.5.0_16-b06-284)。 至于代码片段,它已经在上面了,非常多; 以上延伸下面的一个。
我可以做一个NSMutableArray的所有元素是SomeClasstypes?
我的客户端/服务器应用程序正在使用WCF进行通信,这非常棒。 但是目前架构的一个缺点是我必须对某些传输types使用已知types的configuration。 我正在使用内部的Pub / Sub机制,这个要求是不可避免的。 问题是,忘记添加已知types很容易,如果你这样做的话,WCF会自动地失败,并且会发生什么错误的线索。 在我的应用程序中,我知道将要发送的一组types。 我想以编程方式执行configuration,而不是通过当前包含如下内容的App.config文件声明性地执行: <system.runtime.serialization> <dataContractSerializer> <declaredTypes> <add type="MyProject.MyParent, MyProjectAssembly"> <knownType type="MyProject.MyChild1, MyProjectAssembly"/> <knownType type="MyProject.MyChild2, MyProjectAssembly"/> <knownType type="MyProject.MyChild3, MyProjectAssembly"/> <knownType type="MyProject.MyChild4, MyProjectAssembly"/> <knownType type="MyProject.MyChild5, MyProjectAssembly"/> </add> </declaredTypes> </dataContractSerializer> </system.runtime.serialization> 相反,我想要做这样的事情: foreach (Type type in _transmittedTypes) { // How would I write this method? AddKnownType(typeof(MyParent), type); } 有人可以解释我怎么可以做到这一点? 编辑请理解,我试图在运行时dynamic设置已知types,而不是在configuration中使用声明或在源代码中使用属性。 这基本上是关于WCF API的一个问题,而不是一个样式问题。 编辑2 […]
在C#中,我可以将types对象的variables转换为typesT的variables,其中T是在typesvariables中定义的?