如何序列化scala BKTree?

时间:2014-03-07 11:37:25

标签: scala serialization

我注意到我是否应该在这里提出这个问题。我有一个扩展可序列化的scala类,但是当我尝试使用fileoutputstream保存类时,我不断收到NotSerializableException。

class BKTree(terms: Seq[String], dist: (String, String) => Int = Levenshtein.distance) extends scala.serializable{

}

class BKNode(val name: String,dist: (String, String) => Int = Levenshtein.distance) extends scala.serializable{

}

object Levenshtein extends scala.serializable {

}

BKTree生成的工作完全正常,但在尝试保存树时,它会生成NotSerializableException。

1 个答案:

答案 0 :(得分:1)

  1. 您应该扩展Serializable(或java.io.Serializable)。 serializable是不推荐使用的注释。

  2. 您无法序列化任意函数(例如dist)。

  3. 我可以建议一种解决方法:

    // require that distance functions be serializable
    trait DistFunction extends (String, String) => Int with Serializable
    
    object Levenshtein {
      val distance: DistFunction = ...
    }
    
    class BKTree(terms: Seq[String], dist: DistFunction) extends Serializable
    
    ...
    

    请注意,您必须确保distance实施 可序列化。