Scala对象和特质的Clojure互操作性

4

我正在尝试在Clojure项目中使用Scala库,但遇到了一些问题。您如何在Clojure中实现以下Scala代码?

object LabelDomain extends CategoricalDomain[String]
class Label(val token: Token, s: String) extends LabeledCategoricalVariable(s) {
  def domain = LabelDomain
}

object FeaturesDomain extends CategoricalDimensionTensorDomain[String]
class Features(val token: Token) extends BinaryFeatureVectorVariable[String] {
  def domain = FeaturesDomain
}

object model extends ChainModel[Label,  Features, Token](
      LabelDomain,
      FeaturesDomain,
      l => l.token.attr[Features],
      l => l.token,
      t => t.attr[Label])

CategoricalDomainCategoricalDimensionTensorDomain是特征。 LabeledCategoricalVariableBinaryFeatureVectorVariable是抽象类。 ChainModel是一个类。


我不禁想知道Scala在库互操作性方面与Clojure的匹配程度如何。另外...我认为你需要更多地说明示例中各个定义名称——它相当简洁。 - Randall Schulz
@RandallSchulz,我已经更新了帖子,更具体地涉及到了所涉及的类型。 - calstad
也许问题可以大大简化?术语(“范畴”,“张量”,“域”等)可能会吓到人们,尽管它们与问题无关。 - David J.
重度的面向对象代码不适合使用Clojure(当然,这仍然是可行的),也许你应该用Scala来做。Clojure 更多关注于数据,而Scala 更多关注于类型。 - islon
1个回答

0

看起来你正在尝试使用FACTORIE和Clojure一起使用。作为一个既热爱Clojure又在构建FACTORIE的实验室工作的人,我不建议这样做。FACTORIE的代码库采用了非常命令式的风格,并且充满了可变状态。如果我在Clojure中得到了一个FACTORIE对象,我会感到非常迷惑。FACTORIE还大量使用Scala特性,这些特性在编译Java时(Clojure和Scala必须交互的级别)无法很好地转换。

如果你已经有一个大型的Clojure代码库,并且需要一个良好的线性链CRF实现(基于你上面使用的ChainModel),我建议看看MALLET。它是纯Java编写的,并由同一实验室开发。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接