我在哪里可以找到Scala的"神奇"的功能列表,如apply,unapply,update,+=,等?
魔术函数我指的是例如编译器的一些语法糖使用的函数
o.update(x,y) <=> o(x) = y
Run Code Online (Sandbox Code Playgroud)
我搜索了一些scala magic和同义词的组合functions,但我没有找到任何东西.
我对标准库中魔术函数的使用不感兴趣,但存在魔术函数.
Dan*_*ral 77
我所知道的:
Getters/setters相关:
apply
update
identifier_=
Run Code Online (Sandbox Code Playgroud)
模式匹配:
unapply
unapplySeq
Run Code Online (Sandbox Code Playgroud)
对于-内涵:
map
flatMap
filter
withFilter
foreach
Run Code Online (Sandbox Code Playgroud)
前缀运算符:
unary_+
unary_-
unary_!
unary_~
Run Code Online (Sandbox Code Playgroud)
除此之外,任何隐含的从A到B的Scala也将转换A <op>= B为A = A <op> B,如果以前运营商没有定义,"OP"是不是字母数字,而<op>=不是!=,==,<=或>=.
而且我不相信Scala的所有语法糖都列在其中的任何一个地方.
Dan*_*wak 16
除了update和apply,还有一些一元运算符(我相信)有资格作为魔法:
unary_+unary_-unary_!unary_~再加上常规的中缀/后缀运算符(几乎可以是任何东西),你就拥有了完整的包.
你真的应该看看Scala语言规范.它是这个东西的唯一权威来源.它并不难读(只要你对无上下文语法感到满意),并且很容易搜索.唯一没有说明的是XML支持.
Yar*_*ena 11
对不起,如果它没有完全回答你的问题,但到目前为止我最喜欢的WTF时刻是@作为模式匹配中的赋值运算符.感谢"Scala编程"的软拷贝,我发现它非常快.
使用@我们可以将模式的任何部分绑定到变量,如果模式匹配成功,变量将捕获子模式的值.以下是Scala编程的示例(第15.2节 - 变量绑定):
expr match {
case UnOp("abs", e @ UnOp("abs", _)) => e
case _ =>
}
Run Code Online (Sandbox Code Playgroud)
如果整个模式匹配成功,则匹配UnOp("abs",_)部分的部分可用作变量e.
而这里的什么编程斯卡拉说一下吧.
该链接不再有效.这是一个.