是否可以在方法名称中使用尖括号,例如:
class Foo(ind1:Int,ind2:Int){...}
var v = new Foo(1,2)
v(1) = 3 //updates ind1
v<1> = 4 //updates ind2
Run Code Online (Sandbox Code Playgroud)
真实的情况显然比这更复杂!!我试图提供一个方便的用户界面.
句法糖,恕我直言,通常使程序比从极简主义的原语集编码更易读,更容易理解.我并没有真正看到好的,经过深思熟虑的语法糖的缺点.为什么有些人基本上认为语法糖最多是多余的,最糟糕的是要避免什么?
编辑:我不想命名,但是因为人们问,似乎大多数C++和Java程序员,坦率地说,他们并不关心他们的语言完全没有语法糖.在很多情况下,他们不一定非常喜欢这种语言的其他部分足以使缺糖值得权衡,这是因为他们真的不在乎.此外,Lisp程序员似乎对他们语言的奇怪符号感到骄傲(我不会将其称为语法,因为它在技术上并非如此),尽管在这种情况下,它更容易理解,因为它允许Lisp的元编程工具像它们一样强大.
我今天遇到了这段代码,我不知道它是如何工作的.我知道如何制作匿名类,但我习惯于看到一个方法签名,而不仅仅是一对大括号.这些大括号之间的代码是否放入静态块?它会进入构造函数吗?还是完全不同的东西?
conext.checking(new Expectations() {
{ // <- what does this pair of braces do?
oneOf(alarm).getAttackAlarm(null);
}
});
Run Code Online (Sandbox Code Playgroud) 当我使用Functors,Monads和其他Hakell构造时,如果我的代码不仅仅是几行,我更喜欢使用一些语法糖,如do-notation.这使我更容易遵循代码流程.除了风格偏好之外,使用脱糖块而不是含糖替代品是否有任何真正的优势?
这是一个相当无用的断言错误; 它没有告诉所涉及的表达式的值(假设使用的常量实际上是变量名):
$ python -c "assert 6-(3*2)"
[...]
AssertionError
Run Code Online (Sandbox Code Playgroud)
assert在Python中有更好的实现更加花哨吗?它不得在执行时引入额外的开销(断言失败时除外)..如果使用-Oflag,则必须关闭.
编辑:我知道assert的第二个参数是一个字符串.我不想写一个..因为它是在被断言的表达式中编码的.干(不要重复自己).
在C#(和Java)中,字符串只是一个具有存储长度的char数组,并且添加了一些方法.同样地,(参考与值之外的东西除外)对象只不过是带有继承和接口的美化结构.
在一个层面上,这些新增功能感觉就像是清晰的功能和增强功能.在另一个层面上,他们觉得从"语法糖"状态的边缘升级.
为了进一步考虑这个想法,请考虑(我可能有一些细节错误,但重点仍然是):
transistor
elementary logic gate
compound gate
| |
ALU flip-flop
| | |
| register RAM
| |
CPU
microcode
assembly
C
C++
| |
MSIL JavaScript
C# jQuery
Run Code Online (Sandbox Code Playgroud)
很多时候,任何单一的抽象层看起来都像语法糖,但是多层分离感觉彼此之间的距离非常小.
你怎么知道什么东西停止了语法糖并开始成为一个真正的功能?
在Python中,可以做到:
d = {1 : 'Hello', 2 : 'World'}
Run Code Online (Sandbox Code Playgroud)
在C#中,它更详细:
Dictionary<int, string> d = new Dictionary<int, string>();
d.Add(1, 'Hello');
d.Add(2, 'World');
Run Code Online (Sandbox Code Playgroud)
我怎么能让这个更简洁?
我有很多元素的清单.
我关心它的两个元素,a和b.
我不知道列表的顺序,也不想对它进行排序.
是否有一个很好的单线,True如果a之前发生会返回,否则会b错误?
斯卡拉有时候只是脱毒
a += b
Run Code Online (Sandbox Code Playgroud)
至
a = a + b
Run Code Online (Sandbox Code Playgroud)
但不总是.例如,一些可变集合定义了一个+=方法,而不是它变成了一个方法
a.+=(b)
Run Code Online (Sandbox Code Playgroud)
这是这种行为吗?
+=方法a?(包括有这种行为的其他例子吗?)相关的例子
改编自Scala中的编程
var s = Set("a", "b")
s += "c"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第二行代码
s += "c"基本上是简写:
s = s + "c"
Run Code Online (Sandbox Code Playgroud) C# 中没有类型有什么新功能?
我在工作中遇到如下代码:
throw new("some string goes here");
这是new("some string goes here")在 C# 中创建字符串的方法还是其他方法?
syntactic-sugar ×10
syntax ×3
c# ×2
python ×2
scala ×2
applicative ×1
assert ×1
debugging ×1
dictionary ×1
dsl ×1
functor ×1
haskell ×1
java ×1
list ×1
monads ×1
new-operator ×1