【问题标题】:Issue using javascript library from within scala.js anonymous class在 scala.js 匿名类中使用 javascript 库的问题
【发布时间】:2015-11-16 04:23:54
【问题描述】:

我正在尝试使用来自my scala.js appthis javascript 库(简化的可运行示例)。

我可以成功使用 api 的某些部分,但对于其他部分,我无法确定我的 Scala 外观的正确类型签名。

例如,如果一个 javascript 函数返回 { text: 'June 5th 1998', ... } 我可以定义 scala.js 类来表示该函数并且以下成功:

class Value extends js.Object {
  def date(): js.Dictionary[Int] = js.native
}

object nlp extends js.Object {
  def sentences(text: String): js.Array[Sentence] = js.native
  def value(text: String): Value = js.native
}

nlp.value("I married April on June 6th 1998.").date()

但是,如果 javascript 返回一个相同的数组(例如[{ text: ...}, { text: ...}]),或者即使它返回一个简单的String(例如"June 5th and June 6th",因为以下编译但在运行时失败,@987654328 @:

class Sentence extends js.Object {
  def text(): String = js.native
  def values(): js.Array[Value] = js.native
}
val sentences = nlp.sentences(splittableText)
sentences.map( sentence => sentence.values() )
// Or `sentences.map( sentence => sentence.text() )`

如何使用来自 scala.js 的这个 javascript api?

非常感谢您的观看。

【问题讨论】:

    标签: scala scala.js


    【解决方案1】:

    textsentences 返回的对象中的一个属性(或字段)。这不是一种方法。因此,您必须将其声明为 def 而没有 ()

    def text: String = js.native
    

    【讨论】:

    • 进行更改后,我似乎得到:Uncaught scala.scalajs.runtime.UndefinedBehaviorError: An undefined behavior was detected: undefined is not an instance of java.lang.String
    • 那么这意味着它根本没有text 字段/方法。检查他们的 API。
    • 感谢您的帮助。 text 字段应该在那里,它是 the docs 中的第二个示例,它在 Sentence definition 中。我不知道如何用 Scala FunctionXX 表示 javascript Sentence 函数,所以我用 Class 表示它——这可能在这里起作用吗?
    • 您上面的代码与您链接到的示例不对应。该示例显示以nlp.pos(...).sentences[0] 访问它,这意味着pos(不是sentences)返回js.Array[Sentence]
    • 显然get sentences from nlp 也可以,但重写为使用pos 给出了不同的错误:Uncaught scala.scalajs.runtime.UndefinedBehaviorError: An undefined behavior was detected: function (){return b.tokens.map(function(a){return a.text}).join(" ")} is not an instance of java.lang.String
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2014-03-06
    • 2011-08-13
    相关资源
    最近更新 更多