2015-08-22 2 views
0

Я пытаюсь использовать scala-травление, потому что на сайте github кажется таким простым и чистым. Но, я неудачу в использовании его в этом простом РЕПЛ:scala-pickling в POJO в scala 2.11 - Это действительно просто?

scala> import scala.pickling._ 
import scala.pickling._ 

scala> import scala.pickling.Defaults._ 
import scala.pickling.Defaults._ 

scala> import binary._ 
import binary._ 

scala> class Xpto { var a = 0D; var b = 0 } 
defined class Xpto 

scala> val v = new Xpto { a = 1.23; b = 5 } 
v: Xpto = [email protected] 

scala> v.pickle 
<console>:19: error: type mismatch; 
found : v.type (with underlying type Xpto) 
required: ?{def pickle: ?} 
Note that implicit conversions are not applicable because they are ambiguous: 
both method PickleOps in package pickling of type [T](picklee: T)pickling.PickleOps[T] 
and method pickleOps in trait Ops of type [T](picklee: T)scala.pickling.PickleOps[T] 
are possible conversion functions from v.type to ?{def pickle: ?} 
      v.pickle 
      ^
<console>:19: error: value pickle is not a member of Xpto 
        v.pickle 
        ^

Что не так?

Я сделал доступ к другим вопросам на StackOverflow с этим же типом вопроса, например:

Scala pickling: Simple custom pickler for my own class?

Obs .: Я использую эту ссылку в build.sbt:

"org.scala-lang.modules" %% "scala-pickling" % "0.10.1" 

ответ

0

Вы уверены, что это только Импорт, который вы используете, когда в REPL? Ошибки выше, так как он говорит:

Обратите внимание, что неявные преобразования не применяются, поскольку они являются неоднозначными: оба метода PickleOps в пакете травления типа [Т] (picklee: Т) pickling.PickleOps [T] и метод pickleOps в Ops признака типа [Т] (picklee: Т) scala.pickling.PickleOps [Т] возможны функции преобразования от v.type до {защиту протравить:?}?

Таким образом, вы имеют как минимум две неявные преобразования, от scala.pickling.PickleOps[T]() и scala.pickling.Ops.pickleOps. Это странно, потому что PickleOps не является неявным классом.

Для меня это работает (Scala version 2.11.7 Java 1.7.0_79) в свежем РЕПЛ:

scala> import scala.pickling._ 
scala> import scala.pickling.Defaults._ 
scala> import binary._ 
scala> class Xpto { var a = 0D; var b = 0 } 
defined class Xpto 
scala> val v = new Xpto { a = 1.23; b = 5 } 
v: Xpto = [email protected] 
scala> v.pickle 
res6: pickleFormat.PickleType = BinaryPickle([0,0,0,23,99,109,100,53,36,36,97,110,111,110,102,117,110,36,49,36,36,97,110,111,110,36,49,63,-13,-82,20,122,-31,71,-82,0,0,0,5]) 
0

Отлично! Он работает!

Я начал новую свежую консоль scala.

Я использовал эту ссылку на scala.pickling в build.sbt:

"org.scala-lang" %% "scala-pickling" % "0.10.1" 

и теперь я использую

"org.scala-lang.modules" %% "scala-pickling" % "0.10.1" 

Я также использующий Scala 2.11.6

Теперь он работает отлично, и на самом деле все так просто.

scala> import scala.pickling._ 
import scala.pickling._ 

scala> import scala.pickling.binary._ 
import scala.pickling.binary._ 

scala> import scala.pickling.Defaults._ 
import scala.pickling.Defaults._ 

scala> class Xpto { var a = 0D; var b = 0; } 
defined class Xpto 

scala> val v = new Xpto { a = 1.23; b = 4; } 
v: Xpto = [email protected] 

scala> v.pickle 
res0: pickling.binary.pickleFormat.PickleType = BinaryPickle([0,0,0,52,46,108,105,110,101,55,46,46,114,101,97,100,46,46,105,119,46,46,105,119,46,46,105,119,46,46,105,119,46,46,105,119,46,46,105,119,46,46,105,119,46,46,105,119,46,46,97,110,111,110,46,49,63,-13,-82,20,122,-31,71,-82,0,0,0,4]) 

Я не сейчас, если ссылки на другие библиотеки библиотек порождали это неоднозначное подтверждение. Мои ссылки в build.sbt являются:

libraryDependencies ++= Seq(
    "log4j" % "log4j" % "1.2.17", 
    "javax.transaction" % "jta" % "1.1", 
    "com.typesafe.akka" %% "akka-actor" % "2.3.10", 
    "com.typesafe.akka" %% "akka-testkit" % "2.3.10", 
    "org.scalatest" %% "scalatest" % "3.0.0-SNAP4" % "test", 
    "org.apache.commons" % "commons-io" % "1.3.2", 
    "com.typesafe.akka" %% "akka-slf4j" % "2.3.11", 
    "ch.qos.logback" % "logback-classic" % "1.0.9", 
    "org.scala-lang.modules" %% "scala-pickling" % "0.10.1" 
) 

Благодаря Markus.

Смежные вопросы