例如这个:
groovy:000> Arrays.asList 1,2,3,4,5
===> [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
有效,因为不需要该值。
但是当返回值赋给变量时:
groovy:000> a = Arrays.asList 1,2,3,4,5
ERROR org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, groovysh_parse: 1: unexpected token: 1 @ line 1, column 19.
a = Arrays.asList 1,2,3,4,5
^
1 error
at java_lang_Runnable$run.call (Unknown Source)
Run Code Online (Sandbox Code Playgroud)
失败了。
要使其运行,您需要括号。
groovy:000> a = Arrays.asList( 1,2,3,4,5)
===> [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
这背后有设计原因吗?或者这只是它的实施方式?
在阅读了 Clinton Begin(iBatis 的创建者)的这篇旧文章后,我真的想知道他关于注释与属性的主张是否被广泛接受,或者是否存在分歧。
他的观点是:
annotation不是关键字(与 不同enum)这些说法有道理吗?C# 如何对此进行改进?
自从我开始编码以来,我一直想知道这个问题:有没有办法根据自己的喜好自定义语言的深层部分.
例如,我的代码主要是在Python中使用| 或:表示集合边界的字符.我经常使用套装,讨厌打字set(some_list)或明确set([a,b,b,c,d]).我一直在使用s()设置s = set,但如果我正在处理其他人必须阅读的代码,这将无效.
也许一个"翻译"文本编辑器附加组件可以保存2个代码副本,一个用你自己的语法,一个用标准语法就足够了.有这样的事吗?(特别是对于python)
我经常听到有人抱怨Java没有未签名的数据类型.请参阅此评论.我想知道这是一个什么问题?我或多或少地用Java编程了10年,从来没有遇到过问题.偶尔在将字节转换为int时& 0xFF需要a,但我不认为这是一个问题.
由于无符号和带符号的数字用相同的位值表示,因此我能想到签名最重要的地方是:
相反,我发现我不需要考虑无符号和有符号数之间的操作以及它们之间的转换.我错过了什么?在编程语言中使用无符号类型有什么实际好处?如何让Java更好?
当我试图在我的RGB颜色实验上移位时,我注意到我无法移动可变数量的位.
Swift书只说你向左/右移动"一个数字"
"按位左移运算符(<<)和按位右移运算符(>>)根据下面定义的规则,将一个数字中的所有位向左或向右移动一定数量的位置."
是故意只能移动预定义数量的位吗?
// Works fine:
let shiftMe: UInt32 = 0xFF0000
let shiftedConst = shiftMe >> 16
// Doesn't work:
let shiftMe: UInt32 = 0xFF0000
let shiftValue:Int = 16
let shiftedConst = shiftMe >> shiftValue
Run Code Online (Sandbox Code Playgroud)
第二个示例将不会编译并抛出此错误:
无法找到接受所提供参数的">>"的重载
快速设计是这样的吗?它是一个bug并修复beta3?(我还在beta2 atm.)
dynamicC#中的关键字可以让我这样做:
dynamic obj = ....;
var foo = obj.foo;
Run Code Online (Sandbox Code Playgroud)
obj.foo在运行时解析属性引用的位置.
由于属性是在运行时解析的,为什么不能将属性本身指定为变量?例如,
var propName = "foo";
var foo = obj[propName];
Run Code Online (Sandbox Code Playgroud)
?
我知道你可以通过反射或将对象转换为Dictionary来完成类似的事情.我对解决方案不感兴趣,因为它解释了为什么C#首先不支持类似Javascript的方括号查找.
在 Modula-2 和 Oberon 中,每个模块和过程声明都必须以模块或过程的名称结尾。在 Pascal 中不需要它。我从来没有真正理解这样做的动机。有人可以启发我吗?
CUDA 内核使用此语法启动(至少在运行时 API 中)
mykernel<<<blocks, threads, shared_mem, stream>>>(args);
Run Code Online (Sandbox Code Playgroud)
这是作为宏实现的还是 nvcc 在将主机代码交给 gcc 之前删除的特殊语法?
假设我有一个
data class Eq(x: Int?)
Run Code Online (Sandbox Code Playgroud)
这将生成一个equals看起来像这样的方法
public boolean equals(Object other){
if(this == other) return true;
if(!(other instanceof Eq)) return false;
Eq otherEq = (Eq) other;
return Intrinsics.areEqual(this.x, otherEq.x);
}
Run Code Online (Sandbox Code Playgroud)
内在的
public static boolean areEqual(Object first, Object second){
return first == null ? second == null : first.equals(second);
}
Run Code Online (Sandbox Code Playgroud)
我不太明白这背后的动机。
保持静态调用而不是内联其实现有什么好处?
为什么Rust有ref关键字?可以
match value.try_thing() {
&Some(ref e) => do_stuff(e),
// ...
}
Run Code Online (Sandbox Code Playgroud)
不能由
match value.try_thing() {
&Some(e) => do_stuff(&e),
// ...
}
Run Code Online (Sandbox Code Playgroud) language-design ×10
c# ×2
java ×2
annotations ×1
attributes ×1
bit-shift ×1
cuda ×1
groovy ×1
kotlin ×1
modula-2 ×1
oberon ×1
python ×1
rust ×1
swift ×1