English 中文(简体)
我怎样才能在不具体说明类型的情况下将任何事物序列化?
原标题:How can I serialize anything without specifying type?
  • 时间:2012-05-25 04:49:51
  •  标签:
  • scala

我和ZeroMQ和Akka合并 发送不同案例的病例类别。 问题是当我试图编译这个代码时:

def persistRelay(relayEvent:String, relayData:Any) = {
    val relayData = ser.serialize(relayData).fold(throw _, identity)
    relayPubSocket ! ZMQMessage(Seq(Frame(relayEvent), Frame(relayData)))
  } 

Scala 编译者将 < code> recursive value 中继数据需要类型 丢回。

正在处理的个案类别各有不同,看起来像Team(用户:列表[Long]、TeamId:Long) 等等。

是否有一种方法允许序列器中的任何类型或工作变通方法? 我宁愿避免为生成数据的每个函数都写序列器,除非绝对必要。

谢谢!

最佳回答

这不是一个打字问题。 问题在于 :

val relayData = ser.serialize(relayData).fold(throw _, identity)

您再次在相同行中声明 < code> val relayData , 与您引用方法参数 < code> relayData 相同。 Scala 编译器不理解您是否拥有/ 想要两个同名变量, 相反, 将它解释为 < code> val relayData 的循环定义。 更改其中一个变量的名称应该修正错误 。

不管怎么说,既然你没有完全了解Scala编译员的要求,我认为,如果能向你们说明编译员甚至希望你们做什么,那也是件好事(尽管有人说,如果照办的话,可能会导致你再犯一个错误,而鉴于当时的情况,这个错误似乎不太合理)。

上面写着"递归值 relayData needs type。"的意思是,它要您简单地指定 relayData 的类型,

val relayData = ...

变成像

val relayData: Serializable = ...

(或者,代替 Sreabable ,使用您想要的 relayData 类型)

它需要这一信息,以便产生一个循环定义。

val x = x + 1

这个代码是... 奇特的, 至少可以说, 但我正在做的是用一种( 赤裸裸的) 递归的方式定义 < code> (code>x > x 使用哪种类型? 它无法通过类型推理真正确定类型, 因为类型推理涉及利用 < em > other 定义的类型信息, 而这个定义需要 < engenchem > > > < x/code > s < em/ / strong > type type 。 现在, < em > we < / em > 也许可以推断我可能正在谈论一个 < code> Int , 但理论上, < code > < x 可能是 < max > 。

val x: Int = x + 1 // Default value for an Int is  0 
x: Int = 1

val y: String = y + 1 // Default value for a String is  null 
y: String = null1

所有真正改变的是类型注释,但结果却大相径庭 — — 这只是个非常简单的例子! 因此, 是的, 要总结所有这一切... 在大多数情况下 < 强( 强) < / 强( 强) >, 当它抱怨需要类型的循环值时, 你只需要对贫穷的编译者有一定的同情心, 并给出它如此渴望的类型信息。 它对你也是一样, DeLongey! 它对你也是一样!

问题回答

暂无回答




相关问题
How to flatten a List of different types in Scala?

I have 4 elements:List[List[Object]] (Objects are different in each element) that I want to zip so that I can have a List[List[obj1],List[obj2],List[obj3],List[obj4]] I tried to zip them and I ...

To use or not to use Scala for new Java projects? [closed]

I m impressed with Twitter and investigating to use Scala for a new large scale web project with Hibernate and Wicket. What do you think about Scala, and should I use it instead of Java? EDIT: And, ...

Why does Scala create a ~/tmp directory when I run a script?

When I execute a Scala script from the command line, a directory named "tmp" is created in my home directory. It is always empty, so I simply deleted it without any apparent problem. Of course, when I ...

Include jar file in Scala interpreter

Is it possible to include a jar file run running the Scala interpreter? My code is working when I compile from scalac: scalac script.scala -classpath *.jar But I would like to be able to include a ...

Scala and tail recursion

There are various answers on Stack Overflow which explain the conditions under which tail recursion is possible in Scala. I understand the limitations and how and where I can take advantage of tail ...

热门标签