Список “волшебных” функций Scala

Возможно, это видео могло бы помочь пролить некоторый свет для Вас:-)
http://channel9.msdn.com/posts/Charles/The-Concurrency-Runtime-Fine-Grained-Parallelism-for-C/

71
задан Peter Mortensen 29 April 2013 в 18:55
поделиться

4 ответа

Насколько мне известно:

Связанные с геттерами / сеттерами:

apply
update
identifier_=

Сопоставление с образцом:

unapply
unapplySeq

Формальное понимание:

map
flatMap
filter
withFilter
foreach

Операторы с префиксом:

unary_+
unary_-
unary_!
unary_~

Помимо этого, любые неявно из A в B. Scala также преобразует A = B в A = A B , если первый оператор не определен, "op" будет не буквенно-цифровое, и = не ! = , == , <= или > = .

И я не верю, что есть какое-то одно место, где перечислены все синтаксические сахара Scala.

77
ответ дан 24 November 2019 в 13:04
поделиться

They are defined in the Scala Language Specification. Насколько мне известно, как вы упомянули, существует всего три «магических» функции.

Скалы Getter и Setter также могут иметь отношение к вашей «магии»:

scala> class Magic {
 |     private var x :Int = _
 |     override def toString = "Magic(%d)".format(x)
 |     def member = x
 |     def member_=(m :Int){ x = m }
 | }

defined class Magic

scala> val m = new Magic

m: Magic = Magic(0)

scala> m.member

res14: Int = 0

scala> m.member = 100

scala> m

res15: Magic = Magic(100)

scala> m.member += 99

scala> m

res17: Magic = Magic(199)
3
ответ дан 24 November 2019 в 13:04
поделиться

In addition to update and apply, there are also a number of unary operators which (I believe) qualify as magical:

  • unary_+
  • unary_-
  • unary_!
  • unary_~

Add to that the regular infix/suffix operators (which can be almost anything) and you've got yourself the complete package.

You really should take a look at the Scala Language Specification. It is the only authoritative source on this stuff. It's not that hard to read (as long as you're comfortable with context-free grammars), and very easily searchable. The only thing it doesn't specify well is the XML support.

16
ответ дан 24 November 2019 в 13:04
поделиться

Извините, если это не совсем ответ на ваш вопрос, но пока что мой любимый WTF-момент - это @ как оператор присваивания внутри сопоставления с образцом. Благодаря электронной копии «Программирования на Scala» я довольно быстро узнал, что это было.

Используя @, мы можем привязать любую часть шаблона к переменной, и если совпадение с шаблоном будет успешным, переменная будет фиксировать значение подшаблон. Вот пример из Программирование на Scala (Раздел 15.2 - Привязка переменных):

expr match {
  case UnOp("abs", e @ UnOp("abs", _)) => e
  case _ =>
}

Если все сопоставление с образцом выполнено успешно, затем часть, которая соответствует Часть UnOp ("abs", _) сделана доступной в качестве переменной e.

И здесь , что говорит об этом Programming Scala

Эта ссылка больше не работает. Здесь тот, который работает.

11
ответ дан 24 November 2019 в 13:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: