【问题标题】:Exporting companion object methods in ScalaJS?在 ScalaJS 中导出伴随对象方法?
【发布时间】:2016-08-15 14:30:52
【问题描述】:

当使用 ScalaJS 时,我可以像这样导出一个对象和所有成员

@JSExport object Thing {
    @JSExport def doThing(x:Int) = x * 2
}

但是在创建伴随对象时,ScalaJS 似乎不再导出方法。

@JSExport @JSExportAll case class Thing(x:Int)

@JSExport object Thing {
   @JSExport def fromNumber(x:Int) = Thing(x)
}

在这个例子中,我现在有 Javascript 类,我可以通过调用 Thing(n) 来实例化,但似乎没有任何方法 Thing.fromNumber 可用。

ScalaJS 可以做到这一点吗?

(注意:目前使用“ScalaJS 0.6.8”与“Scala 2.11.8”和“SBT 0.13.9”)

【问题讨论】:

    标签: scala scala.js


    【解决方案1】:

    这样称呼它:

    Thing().fromNumber(...)
    

    (请注意“事物”后面的额外括号)

    【讨论】:

    • 不幸的是,'Thing()' 指的是案例类构造函数。
    【解决方案2】:

    您必须在导出伴随对象时为其指定另一个名称:

    @JSExport @JSExportAll case class Thing(x:Int)
    
    @JSExport("ThingOps")
    object Thing {
       @JSExport def fromNumber(x:Int) = Thing(x)
    }
    

    现在拨打ThingOps().fromNumber(1)

    您要求的是静态方法。 Scala.js 目前不支持这些(参见#1902)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多