рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╣реБрдд рдкрд╣рд▓реЗ,
Scala 2.11.0 рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЕрд░реНрдз-рдЙрджреНрдзрд░рдг рд╣реИ - рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдкрд╛рд░рд╕ рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХрд╛рд▓рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрдВрддреНрд░; рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рддрдВрддреНрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ, рдЬрдмрдХрд┐ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдореИрдХреНрд░реЛрдВ рдХрд╛ рд╡рд┐рд╖рдп рдЕрднреА рднреА рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ;
рдЕрдВрддрд┐рдо рдкреЛрд╕реНрдЯрдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдЧрдВрднреАрд░ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреВрд░реЗ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╣реА рдерд╛ред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо JSON рдбрд┐рд╕реЗрд░рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореИрдХреНрд░реЛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВрдЧреЗред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
Scala -
spray.json рдХреЗ рд▓рд┐рдП JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред
рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбрд┐рд╕реЗрд░реНрдмрд▓рд╛рдЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдпрд╛рдд рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ:
рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдЕрдЧрд░ рд╣рдо рдкреВрд░реА рдХрдХреНрд╖рд╛ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдореИрдВ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
abstract sealed class Message() case class SimpleMessage() extends Message case class FieldMessage(field: String) extends Message case class NestedMessage(nested: Message) extends Message case class MultiMessage(field: Int, nested: Message) extends Message
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рдЕрдореВрд░реНрдд рдЬрдирдХ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдбрд┐рд╕реЗрд░рд░рд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп, JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ
type
рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдХрд╛рдлреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ, рдФрд░ рдбреАрд╕рд░реНрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдлрд╝реАрд▓реНрдб рдкрд░ рдбрд┐рд╕реНрдкреИрдЪ рдХрд░рдирд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
json.type match { case "SimpleMessage" => SimpleMessage() case "FieldMessage" => FieldMessage(json.field)
Spray.json рд▓рд╛рдЗрдмреНрд░реЗрд░реА
RootJsonFormat
рдлреЙрд░реНрдореЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рд╕реЗ JSON рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡реИрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдореЗрдЯрд░ рдХрд╛ рдореВрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
val typeName = ... typeName match { case "FieldMessage" => map.getFields("field") match { case Seq(field) => new FieldMessage(field.convertTo[String]) } case "NestedMessage" => map.getFields("nested") match { case Seq(nested) => new NestedMessage(nested.convertTo[Message]) } case "MultiMessage" => map.getFields("field", "nested") match { case Seq(field, nested) => new MultiMessage(field.convertTo[Int], nested.convertTo[Message]) } case "SimpleMessage" => map.getFields() match { case Seq() => new SimpleMessage() } }
рдпрд╣ рдХреЛрдб рдереЛрдбрд╝рд╛ рджрд┐рдЦрддрд╛ рд╣реИ ... рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯред рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╕реНрдереВрд▓ рдХрд╛рд░реНрдп рд╣реИ! рд▓реЗрдЦ рдХрд╛ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕рд╛ рдПрдХ рдореИрдХреНрд░реЛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ рдЬреЛ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓
Message
рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдЧрдарди
рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрд╣рд▓реА рдмрд╛рдзрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдПрд╕рдмреАрдЯреА рдореИрдХреНрд░реЛ рдФрд░ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдПрд╕рдмреАрдЯреА рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореИрдВ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рдзрд╛рди рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдХреНрд░реЛ рдХреЛрдб рдФрд░ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рджреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕реЗ рдореБрдЦреНрдп
project/Build.sbt
.
project/Build.sbt
рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпреЗ рддреИрдпрд╛рд░реА рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдХреЛрдб рдореЗрдВ рдХреА рдЧрдИ рд╣реИ, рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдореА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:
рдПрдХ рдФрд░ рд╕реВрдХреНрд╖реНрдорддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдореИрдХреНрд░реЛ рдХреЛ рдПрдХ рд╢реНрд░реЗрдгреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрджрд╛рдиреБрдХреНрд░рдо рдЙрд╕ рд╕рдордп рдЬреНрдЮрд╛рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рдореИрдХреНрд░реЛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдлрд╛рдЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдХреНрд░рдо рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдпрд╛ рддреЛ рдЙрди рд╡рд░реНрдЧреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдХреНрд░реЛ рдХреЛ рдореИрдХреНрд░реЛ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬрдмрдХрд┐ рдореИрдХреНрд░реЛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЕрднреА рднреА рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдпрд╛ рдмрд╕ рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦреЗрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдХреНрд░реЛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛред
рдореИрдХреНрд░реЛрдЬрд╝ рдХреЛ рдбреАрдмрдЧ рдХрд░рддреЗ рд╕рдордп,
-Ymacro-debug-lite
рд╕рдВрдХрд▓рдХ рд╡рд┐рдХрд▓реНрдк
-Ymacro-debug-lite
рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рддреИрдирд╛рддреА рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдпреЗ рдкрд░рд┐рдгрд╛рдо рд╕реНрдХреЗрд▓ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдФрд░ рдЕрдХреНрд╕рд░ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдмрд┐рдирд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЧреИрд░-рддреБрдЪреНрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ)ред
рдореИрдХреНрд░реЛ
рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдореИрдХреНрд░реЛрдЬрд╝ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреА рддрд░рд╣ рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдХреЗрд▓ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдЬрд╛рд╡рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рднреА рд╕реНрдХрд╛рд▓рд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдореИрдХреНрд░реЛ рдЗрдВрдЬрди рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХреЛрдб рдХреЗ рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдХреЛрдб рдХреЗ рдЕрдиреБрд░реВрдк рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рд╕реНрдХрд╛рд▓рд╛ рдореИрдХреНрд░реЛрдЬрд╝ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп рд╕реА рднрд╛рд╖рд╛ рдореИрдХреНрд░реЛрдЬрд╝ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред
рд╕реНрдХрд╛рд▓рд╛ рдореИрдХреНрд░реЛрдВ
Context
рдХреНрд▓рд╛рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрд╢рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдореИрдХреНрд░реЛ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдЗрд╕рдореЗрдВ рд╕реЗ
Universe
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░реВрдиреА рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд░рдирдЯрд╛рдЗрдо рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдореЗрдВ - рд╡рд╣рд╛рдБ рдХреЗ рдкреНрд░рдХрд╛рд░, рд╡рд┐рдзрд┐рдпреЛрдВ, рдЧреБрдгреЛрдВ рдЖрджрд┐ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╣реА рд╕рдВрджрд░реНрдн рдЖрдкрдХреЛ
Literal
,
Constant
,
List
, рдЖрджрд┐ рдЬреИрд╕реЗ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдкреЗрдбрд╝ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдореИрдХреНрд░реЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдореИрдХреНрд░реЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд┐рдЦреЗрдВ:
import scala.language.experimental.macros import scala.reflect.macros.blackbox.Context import spray.json._ object Parsers { def impl[T: c.WeakTypeTag](c: Context)(typeName: c.Expr[String], map: c.Expr[JsObject]): c.Expr[T] = { import c.universe._ val cls = weakTypeOf[T].typeSymbol.asClass val tree = ???
parseMessage[T]
рдореИрдХреНрд░реЛ рдПрдХ рдкреНрд░рдХрд╛рд░
T
рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐
parseMessage[T]
рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реИ, рдФрд░ рдбреАрдЬрд╝реЗрд░рд┐рд╕реЗрдмрд▓
map
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рд╣реИ, рдФрд░ рдбреАрдЬрд╝реЗрд░рд┐рд▓реЗрд╕ рдЯреНрд░реА рдХреЛ рдмреЗрд╕ рдЯрд╛рдЗрдк
T
рдкрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рджреЗрддрд╛ рд╣реИ
T
рдЯрд╛рдЗрдк
T
рдПрдХ рддрд░реНрдХ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ
T
рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЛ рдПрдХ
c.WeakTypeTag
рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдИ рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛
c.WeakTypeTag
ред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
TypeTag
рддрд░реНрдХ
TypeTag
рдЙрдкрдпреЛрдЧ рд╕реНрдХрд╛рд▓рд╛ рджреНрд╡рд╛рд░рд╛ рдЬреЗрдиреЗрд░рд┐рдХ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрдорддреМрд░ рдкрд░
рдЯрд╛рдЗрдк рдПрд░рд╛рд╕реБрд░реЗрдЬ рдХреЗ рдХрд╛рд░рдг рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдХреНрд░реЛ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдХреЗрд╡рд▓
TypeTag
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди
WeakTypeTag
, рдЬрд┐рд╕реЗ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ (рдЗрд╕рдореЗрдВ рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП "рдкреВрд░реНрдг"
TypeTag
рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореИрдХреНрд░реЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рджреМрд░рд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
TypeTag
рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ
Universe
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ
typeOf[T]
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рддрджрдиреБрд╕рд╛рд░,
WeakTypeTag
рд▓рд┐рдП рдПрдХ
weakTypeOf[T]
рд╡рд┐рдзрд┐ред
рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рдХрдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреАрдврд╝реА рдХреЗ рджреМрд░рд╛рди рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛
2 + 2
Apply(Select(Literal(Constant(2)), TermName("$plus")), List(Literal(Constant(2))))
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
Apply(Select(Literal(Constant(2)), TermName("$plus")), List(Literal(Constant(2))))
; рдФрд░ рднреА рдЧрдВрднреАрд░ рдорд╛рдорд▓реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╣рдореЗрдВ рдкреИрдЯрд░реНрди рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЗ рдмрдбрд╝реЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдЗрд╕ рдХрдард┐рдирд╛рдИ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рджреВрд░ рдХрд░реЗрдВрдЧреЗред
Kvazitsitaty
рд╕реНрдХреИрд▓рд╛ 2.11.0 рдХреЗ рдмрд╛рдж рд╕реЗ рдореИрдХреНрд░реЛрдЬрд╝ рдХреА рдЙрдкрд░реЛрдХреНрдд рдХрдореА рдХреЛ рдХреНрд╡реИрд╕реА-рдХреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдз-рдЙрджреНрдзрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
2 + 2
рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрдкрд░реНрдпреБрдХреНрдд рдирд┐рд░реНрдорд╛рдг рдмрд┐рд▓реНрдХреБрд▓
q"2 + 2"
рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдХреНрдпреВрд╕рд┐рдХреЛрдЯреНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓рд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ
Universe
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдЗрди рдкреНрд░рдХреНрд╖реЗрдкрдХреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рджрд╛рдпрд░реЗ рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдХрд▓рдХ рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ,
cq
рдкреИрдЯрд░реНрди рдХреЗ рд▓рд┐рдП
pq
,
match
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
cq
, рдФрд░ рд╕рдВрдкреВрд░реНрдг рднрд╛рд╖рд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП
q
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВред
рдЕрдиреНрдп рд╕реНрд▓рд╛рд▓рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрд░реНрдз-рдЙрджреНрдзрд░рдг рдЙрдирдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
2 + 2
рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
2 + 2
рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
val a = 2 q"$a + $a"
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд╖реЗрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрдиреНрди рдкреЗрдбрд╝реЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдЪрд░
рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред рдирд╛рдо рд╕реЗ рдПрдХ рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ
TermName
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд░реВрдк
case
рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде typeName
рд╡реИрд░рд┐рдПрдмрд▓ рджреНрд╡рд╛рд░рд╛ match
; - рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдореЗрдВ - рдЗрд╕реА рд╢реНрд░реЗрдгреА рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рддрд░реНрдХ рдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ
map.getFields
рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛; - рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ - рдкрд░рд┐рдгрд╛рдореА рдЕрдиреБрдХреНрд░рдо (рдПрдХ рд╣реА
match
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЛ рдЪрд░ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрди рдЪрд░реЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдкрд╛рд╕ рднреЗрдЬрдирд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреВрд░реЗ
match
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдПрдХ рдЖрдо рдкреЗрдбрд╝ рдХреА рдкреАрдврд╝реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрд░реНрдз-рдЙрджреНрдзрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд░ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
val clauses: Set[Tree] = ???
рдХреЛрдб рдХрд╛ рдпрд╣ рдЦрдВрдб рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛
case ..$clauses
match
рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░
case ..$clauses
рдХреЛ
case
рд╢рд╛рдЦрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдпрд╛рдж рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╢рд╛рдЦрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
case "FieldMessage" => map.getFields("field") match { case Seq(field) => new FieldMessage(field.convertTo[String]) }
Quasicitals рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╢рд╛рдЦрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
val tpe: Type
рдЗрд╕ рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рдХрдИ рдЕрд░реНрдз-рдЙрджреНрдзрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
pq"$name"
рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
Seq(...)
рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдПрдХ
JsValue
рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬрд┐рд╕реЗ
JsValue
рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдХ quasi-
convertTo
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ
convertTo
рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рдлреЙрд░реНрдореЗрдЯрд░ рдХреЛ рдкреБрди: рдХреЙрд▓ рдХрд░ рд╕рдХрддреА рд╣реИ (рдЕрд░реНрдерд╛рдд, рдЖрдк рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдЯрд╛рдЗрдк
Message
рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдШреЛрдВрд╕рд▓рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рдкрд░рд┐рдгрд╛рдореА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрдбрд╝ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрддреНрдкрдиреНрди
case
рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде
match
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
val tree = q"$typeName match { case ..$clauses }"
рдпрд╣ рдкреЗрдбрд╝ рдореИрдХреНрд░реЛ рдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рдмрдирддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдХреЛрдб рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рд╕реНрдХрд╛рд▓рд╛ рдореИрдХреНрд░реЛрдЬрд╝ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдЬреЗрд╡реАрдПрдо рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдпрд╛ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдмреЗрд╢рдХ, рдореИрдХреНрд░реЛрдЬрд╝ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрджрд┐ рдЕрдиреБрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ рдкреИрд░ рдХреЛ рд╢реВрдЯ рдХрд░рдиреЗ рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рдХреЛрдб рдХреЗ рд░рд╕рд╛рддрд▓ рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╣рдореЗрд╢рд╛ рдирд┐рдпрдорд┐рдд рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдФрд░ рдпрджрд┐ рдореИрдХреНрд░реЛрдЬрд╝ рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рдореБрджрд╛рдп рдХреЛ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛
- рд╕реНрдХрд╛рд▓рд╛ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдореИрдХреНрд░реЛ рдЕрд╡рд▓реЛрдХрди ред
- рд╕реНрдХрд╛рд▓рд╛ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рд╕реЗ рдХреНрд╡реИрд╢реНрдЪрди рдХрд╛ рдЕрд╡рд▓реЛрдХрди ред
- рд╕реНрдХрд╛рд▓рд╛ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рдЕрд╡рд▓реЛрдХрди ред
- рдПрд╕рдмреАрдЯреА рдХреЗ рд▓рд┐рдП рдореИрдХреНрд░реЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧрд╛рдЗрдб ред
- рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг ред