Scala的"魔法"功能列表

Ela*_*ich 71 syntax scala

我在哪里可以找到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>= BA = A <op> B,如果以前运营商没有定义,"OP"是不是字母数字,而<op>=不是!=,==,<=>=.

而且我不相信Scala的所有语法糖都列在其中的任何一个地方.

  • 你可能想添加unary_!在其他一个帖子中列出的运营商,因为这看起来像这里问题最详尽的答案:) (3认同)

Dan*_*wak 16

除了updateapply,还有一些一元运算符(我相信)有资格作为魔法:

  • 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.

这里的什么编程斯卡拉说一下吧.

该链接不再有效.是一个.