私はScalaを学んでいて、json4sを使用してJSON解析を試すことにしました。逆シリアル化にXPath構文を使用することにしましたが、これまでに見たことのない奇妙な構文に出くわしました。
val json = JsonMethods.parse("""{"meaningOfLife": 42}""")
val JInt(x) = json\"meaningOfLife"
私を混乱させる部分は、ここにあるこのビットです
val JInt(x) = ...
そこで何が起こっているのか、頭を悩ませることはできません。この構文を検索する方法や、それが何と呼ばれているのかさえわかりません。誰かが私を助けることができますか?Scalaは、C++やJavaなどの他の言語では慣れていない多くの優れた機能を備えた素晴らしい言語です。
編集
明確にするために、が定義されていないために混乱してx
いますが、それはどういうわけか関数またはコンストラクターに渡され、その結果に割り当てられて、json\"meaningOfLife"
が返されますJValue
。
編集2
調査して遊んだ結果、これはケースクラスと関係があることがわかりました。次のコードを実行できました。
case class MyCaseClass (x: Int)
val MyCaseClass(x) = new MyCaseClass(5)
println(x, x.getClass) // prints (5,int)
これは、いくつかのコードを見た後、何が起こっているのかをよく理解するのに役立ちます。
val MyCaseClass(x) = MyCaseClass(5)
インスタンス化されたInt
値から(より適切な用語がないために)抽出し、それをに格納しています。つまり、タイプはになります。5
MyCaseClass
x
x
Int
json4sのコードでは、aJInt
はJValue
演算\
子が返すaです。つまり、は(クラスに保存されている)JInt(x)
を取り出し、それを私が収集したものからの値に入れています。BigInt
JInt
x
しかし、まだ質問があります。このプロセスは何と呼ばれていますか?それに関するドキュメントはありますか?