2013-09-03 15 views
5

私はScalaDays 2013で発表された新しいScalaの酸洗ライブラリに取得しようとしていた:私は本当に行方不明です何Scala PicklingScalaの酸洗の使用量は、MyObjectに - >アレイ[バイト] - > MyObjectに

は、いくつかの簡単な例どのようにしていますライブラリが使用されます。

私はそれがそのように再び化したりunpickle化したり、いくつかのオブジェクトを酸洗いすることができることを理解:この例では

import scala.pickling._ 

val pckl = List(1, 2, 3, 4).pickle 
val lst = pckl.unpickle[List[Int]] 

、pcklは型漬物です。この型の使用はまさにどのようなものでしょうか?たとえば、配列[Byte]を取得するにはどうすればよいですか?あなたがバイトに酸洗したいしたい場合

答えて

6

、コードは次のようになります。あなたはJSONを望んでいた場合

import scala.pickling._ 
import binary._   
val pckl = List(1, 2, 3, 4).pickle 
val bytes = pckl.value 

は、コードは輸入品のマイナーチェンジで、ほぼ正確に同じになります。

オブジェクトを漬けている方法
import scala.pickling._ 
import json._   
val pckl = List(1, 2, 3, 4).pickle 
val json = pckl.value 

は、あなたが(binaryまたはjsonのいずれかである)scala.picklingの下で選択したインポートタイプによって異なります。インポートbinaryvalueプロパティはArray[Byte]です。 jsonをインポートし、それはjson Stringです。

+2

はい、cmbaxterはまったく正しいです。ピクルス表示のタイプは 'Pickle'のサブタイプです。 pickleされた表現から 'value'を選択すると、期待する型、バイナリの' Array [Byte] '、JSONの' String'などが得られます。 –

+0

答えをありがとう。 Scalaが暗黙のうちに何かを行うと、私は時々混乱します。私はまだJavaのようなより明示的な構文に慣れていますが、私はそれに取り組んでいます。 ;) –

+1

IntelliJはどのタイプを使用するのか理解できませんか?私はscala.pickling._とbinary._をインポートしました。オブジェクトに.pickleを呼び出すと、IntelliJはそれがBinaryPickleではなくPickle型であると伝えます。それゆえ、.valueはPickle.this.type#ValueType型のものです。コンパイラは、結果の型がBinaryPickleであるため、文句を言わない。私の回避策:.pickle.asInstanceOf [BinaryPickle]を呼び出して、IDEにエラーを表示しないようにしてください。 –

関連する問題