scala函数的序列化
我知道有Jerkson和scalaxb甚至Java的XStream都能成功地序列化scala的数据.我知道他们很好地处理好字符串,整数甚至案例类.但如果我有一个领域的功能?
例如如果我有类似的东西: case class Foo(bar: (Int) => Boolean,baz: Int) 这些字段可以以某种方式序列化为JSON或XML(实际上,我不关心哪一个,它们应该是人类可读的,这就是为什么我不想使用SBinary)? 编辑 我为什么要那样做? 这不是我在标题中写的那么广泛的任务,是的. 但我认为可能有一些疯狂的更好的方式来执行. 解决方法
不,函数不是必需的可序列化的……并且可序列化的函数不太可能提供人类可读的序列化.
如果您希望能够提供任何功能,我担心不会有任何解决方案.如果可以在您的场景中使用,可能的解决方法是构建一个实现Function [Int,Boolean]的case类,从而返回到case类场景. 例如,假设您已经隔离了所有函数检查整数是否可以被给定的整数整除: case class Mod(mod: Int) extends Function[Int,Boolean] { //the extends part is not even require def apply(x: Int) = x % mod == 0 } case class Foo(bar: Mod,baz: Int) 这显然是超限制性的.但我担心这是你能做到的最好的. 根据你的编辑.解决方案可能是拥有一种工厂类: case class IntTest(humanReadableDescription: String) { def apply(x: Int) = IntTest.fromString(humanReadableDescription)(x) } object IntTest { private val fromString = Map[String,Function[Int,Boolean]] ( "mod2" -> {x:Int => x % 2 == 0},"is42" -> {x:Int => x == 42} ) } case class Foo(bar: IntTest,baz: Int) 但在这里,你将失去类型安全. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |