Scala as-patterns

58 views
Skip to first unread message

Viktar Basharymau

unread,
Nov 26, 2012, 3:19:42 AM11/26/12
to scala-enthus...@googlegroups.com, xen...@gmail.com
Привет,

Скаловские as-patterns - это фишка языка, или эта штука основана на какой-нибудь магии из стдлиба/предефа?

Также кастую в тред Женю Бурмако. Он, вероятно, знает ответ.

Витя


Eugene Burmako

unread,
Nov 26, 2012, 3:30:04 AM11/26/12
to Viktar Basharymau, scala-enthus...@googlegroups.com
Фича паттерн матчера. Причем это не дешугаринг, а полноценная часть AST: https://github.com/scalamacros/kepler/blob/topic/typemacros/src/reflect/scala/reflect/api/Trees.scala#L1146.

09:29 ~/Projects/Kepler_pre-typemacros/sandbox (topic/pre-typemacros)$ cat Test.scala class Test {
  List(1, 2) match {
    case foo @ List(1, y) =>
  }
}
09:29 ~/Projects/Kepler_pre-typemacros/sandbox (topic/pre-typemacros)$ scalac -Xprint:parser -Yshow-trees-compact Test.scala
[[syntax trees at end of parser]]// Scala source: Test.scala
PackageDef(Ident(newTermName("<empty>")), List(ClassDef(Modifiers(), newTypeName("Test"), List(), Template(List(Select(Ident(scala), newTypeName("AnyRef"))), emptyValDef, List(DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(pendingSuperCall), Literal(Constant(())))), Match(Apply(Ident(newTermName("List")), List(Literal(Constant(1)), Literal(Constant(2)))), List(CaseDef(Bind(newTermName("foo"), Apply(Ident(newTermName("List")), List(Literal(Constant(1)), Bind(newTermName("y"), Ident(nme.WILDCARD))))), EmptyTree, Literal(Constant(()))))))))))


2012/11/26 Viktar Basharymau <6alli...@gmail.com>

Viktar Basharymau

unread,
Nov 26, 2012, 3:35:20 AM11/26/12
to scala-enthus...@googlegroups.com, Viktar Basharymau
Ага ок, спасибо.
Reply all
Reply to author
Forward
0 new messages