首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala --Scala2.11中的POJO中的泡菜--真的很简单吗?

scala --Scala2.11中的POJO中的泡菜--真的很简单吗?
EN

Stack Overflow用户
提问于 2015-08-22 13:56:00
回答 2查看 332关注 0票数 1

我正在尝试使用scala泡菜,因为在站点github,它看起来非常简单和干净。但是,我未能在这个简单的REPL中使用它

代码语言:javascript
复制
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 = $anon$1@636d2b03

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泡菜:我自己的类的简单定制pickler?

我正在使用build.sbt中的这个引用

代码语言:javascript
复制
"org.scala-lang.modules" %% "scala-pickling" % "0.10.1"
EN

回答 2

Stack Overflow用户

发布于 2015-08-23 07:32:03

您确定这些是您在REPL中使用的仅导入吗?上面的错误就像上面说的:

注意,隐式转换不适用,因为它们是模棱两可的:类型Tpickling.PickleOpsT的包酸洗中的方法PickleOps和Tscala.pickling.PickleOpsT类型的特征操作中的方法pickleOps都是从v.type到?{def泡菜:}的可能转换函数。

因此,您至少有两个隐式转换,来自scala.pickling.PickleOps[T]()scala.pickling.Ops.pickleOps。这很奇怪,因为PickleOps不是一个隐式类。

对于我来说,它可以在一个新的REPL中运行(Scala version 2.11.7 Java 1.7.0_79)

代码语言:javascript
复制
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 = cmd5$$anonfun$1$$anon$1@244da0ed
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
EN

Stack Overflow用户

发布于 2015-08-23 14:04:03

太棒了!它跑了!

我启动了一个新的scala控制台。

我在build.sbt中使用了这个对build.sbt的引用:

代码语言:javascript
复制
"org.scala-lang" %% "scala-pickling" % "0.10.1"

现在我用

代码语言:javascript
复制
"org.scala-lang.modules" %% "scala-pickling" % "0.10.1"

我也在使用Scala2.11.6

现在它工作得很完美,真的很简单。

代码语言:javascript
复制
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 = $anon$1@1e7bd4df

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中的参考资料如下:

代码语言:javascript
复制
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"
)

感谢马库斯。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32156930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档