【发布时间】: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。)