2013-09-03 7 views
5

मुझे लगता है कि ScalaDays 2013 में पेश किया गया नया स्काला अचार बनाना पुस्तकालय में प्राप्त करने के लिए कोशिश कर रहा था: Scala Picklingस्काला अचार बनाना उपयोग MyObject -> सरणी [बाइट] -> MyObject

क्या मैं सच में याद आ रही है कुछ सरल उदाहरण कैसे हो पुस्तकालय का उपयोग किया जाता है।

मैं समझ गया कि मुझे लगता है कि जैसे एक unpickle इसे फिर से किसी वस्तु अचार कर सकते हैं:

import scala.pickling._ 

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

इस उदाहरण में, pckl प्रकार का अचार की है। इस प्रकार का उपयोग वास्तव में क्या है और उदाहरण के लिए मैं कैसे एक ऐरे [बाइट] प्राप्त कर सकता हूं?

उत्तर

6

आप बाइट्स में अचार करना चाहता था चाहते हैं, तो कोड इस तरह दिखेगा:

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

आप json चाहता था, तो कोड आयात का एक मामूली परिवर्तन के साथ लगभग ठीक उसी तरह दिखाई देंगे:

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

कैसे वस्तु मसालेदार है आयात प्रकार है कि आप scala.pickling (किया जा रहा है या तो binary या json) के तहत चुना है पर निर्भर करता है। binary आयात करें और value संपत्ति Array[Byte] है। json आयात करें और यह एक जेसन String है।

+2

हाँ, cmbaxter पूरी तरह से सही है। मसालेदार प्रतिनिधित्व का प्रकार 'अचार' का उप प्रकार है। मसालेदार प्रतिनिधित्व से 'मूल्य' का चयन करने से आपको वह प्रकार मिल जाएगा जो आप उम्मीद करेंगे, 'बाइनरी के लिए ऐरे [बाइट]', जेएसओएन के लिए 'स्ट्रिंग' इत्यादि। –

+0

उत्तर के लिए धन्यवाद। कभी-कभी मुझे भ्रमित हो जाता है जब स्कैला कुछ निश्चित रूप से करता है। मैं अभी भी जावा जैसे अधिक स्पष्ट वाक्यविन्यास के लिए उपयोग किया जाता हूं लेकिन मैं इस पर काम कर रहा हूं। ;) –

+1

क्या यह हो सकता है कि IntelliJ समझ में नहीं आता, किस प्रकार का उपयोग करना है? मैंने scala.pickling._ और binary._ आयात किया और जब मैं किसी ऑब्जेक्ट पर पिकल करता हूं, इंटेलिजे मुझे बताता है कि यह पिकल प्रकार है, बाइनरी पिक्सेल नहीं। इसलिए यह मुझे बताता है कि .value प्रकार Pickle.this.type # ValueType है। संकलक शिकायत नहीं करता है, इसके परिणामस्वरूप बाइनरी पिक्सेल है। मेरा काम-आसपास: कॉलिंग .pickle.asInstanceOf [BinaryPickle] अब के लिए ताकि यह आईडीई में कोई त्रुटि प्रदर्शित न करे। –

संबंधित मुद्दे