【问题标题】:Bracket Access in Scala.jsScala.js 中的括号访问
【发布时间】:2018-09-11 14:02:33
【问题描述】:

我正在尝试从 scala-js/test/src/test/scala/scala/scalajs/test/jsinterop/DictionaryTest.scala 获取以下代码,以便在 Scala.js 项目的浏览器中运行。

import scala.scalajs.js

val obj = js.eval("var dictionaryTest13 = 
     { a: 'Scala.js', b: 7357 }; dictionaryTest13;")
val dict = obj.asInstanceOf[js.Dictionary[js.Any]]
var propCount = 0
var propString = ""

for (prop <- js.Dictionary.propertiesOf(dict)) {
  propCount += 1
  propString += dict(prop)
}
// g.console.log(...)

它给了我:java.lang.RuntimeException: stub

我怎样才能让它工作并利用括号访问,例如运行从 js 到 scala.js 的 json 对象,类似于 js 模式:for(i in obj) {obj[i]} ?

这仅用于以不绑定到特定属性的方式在 over json 数据结构中进行迭代的微不足道的目的。

【问题讨论】:

  • 你用什么 Scala.js 版本来编译代码?
  • 我正在使用 0.4-SNAPSHOT 构建 scala-js-example-app 的一个分支,它本身在 build.sbt 中使用 0.1-SNAPSHOT。
  • 您可能想将其发送至0.4.1。我无法重现您的任何问题。但是 RTE 说“存根”表明您的编译器与您的库不同步。 (js.Dictionary.propertiesOf 是编译器原语,如果这样失败,编译器不会替换它)。
  • 您能否尝试使用稳定版本,例如 0.4.0 或 0.4.1(比 0.4-SNAPSHOT 更新)。另外,你能提供一个堆栈跟踪吗?您的浏览器应该能够使用开发工具为您提供该功能,或者您可以捕获异常并使用printStackTrace() 将其显示在控制台上。
  • 啊太棒了!它不应该在 sbt-scala-console 中工作,因为它使用的是 JVM,它不能执行 Scala.js 代码。 (换句话说:Scala.js 没有有效的 REPL。)

标签: scala scala.js


【解决方案1】:

总结讨论:

OP 的代码在浏览器中与 Scala.js 0.4.0 一起使用。但是,它在 REPL 中不起作用(通过 sbt),因为 Scala.js 不支持 REPL。

如果使用 REPL,sbt 插件以后会发出警告。

【讨论】:

    猜你喜欢
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多