2013-09-03 13 views
5

starałem się dostać do nowej biblioteki Scala wytrawiania który został zaprezentowany na ScalaDays 2013: Scala PicklingScala Trawienie Wykorzystanie MyObject -> Array [Byte] -> MyObject

Co ja naprawdę brakuje kilka prostych przykładów how używana jest biblioteka.

I rozumieć, że można marynowane jakiś przedmiot Znowu unpickle jest tak jak:

import scala.pickling._ 

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

W tym przykładzie pckl jest typu marynaty. Czym dokładnie jest użycie tego typu i jak mogę uzyskać na przykład Array [Byte] tego?

Odpowiedz

6

Jeśli chcesz chciał marynowane w bajtach, wtedy kod będzie wyglądać następująco:

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

Jeśli chciał json, kod będzie wyglądał niemal dokładnie to samo z niewielką zmianą importu:

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

jaki obiekt jest trawiona zależy od rodzaju importu, które wybrał pod scala.pickling (będącego albo binary lub json). Importuj binary i właściwość value to Array[Byte]. Importuj json i jest to json String.

+2

Tak, cmbaxter jest całkowicie poprawny. Typ piklowanej reprezentacji jest podtypem 'Pickle'. Wybranie "wartości" z piklowanej reprezentacji daje typ, jakiego można się spodziewać, 'Array [Byte]' dla binarnego, 'String' dla JSON, itd. –

+0

Dzięki za odpowiedzi. Czasami jestem zdezorientowany, gdy Scala robi coś niejawnie. Wciąż jestem przyzwyczajony do jaśniejszej składni takiej jak Java, ale pracuję nad nią. ;) –

+1

Czy to możliwe, że IntelliJ nie rozumie, jakiego typu użyć? Zaimportowałem scala.pickling._ i binary._, a kiedy zadzwonię .pickle na obiekcie, IntelliJ mówi mi, że jest typu Pickle, a nie BinaryPickle. Dlatego mówi mi, że .value jest typu Pickle.this.type # ValueType. Kompilator nie narzeka, ponieważ typem wyniku jest BinaryPickle. Moje obejście: na razie wołanie .pickle.asInstanceOf [BinaryPickle], aby nie wyświetlał się błąd w IDE. –

Powiązane problemy