javascript - 使用完全优化时,如何访问 Scala.js 中返回的元组的字段?
问题描述
Scala 函数的签名是。
斯卡拉:
@JSExportTopLevel("makeUciMovesScala")
def makeUciMovesScala(
variantKeyOptJs: js.UndefOr[String],
fenOptJs: js.UndefOr[String],
ucisJs: js.UndefOr[js.Array[String]]
):(
js.UndefOr[String],
js.Array[String],
js.Array[String]
)
当我查看结果时,如果没有优化,我会得到一个字典T3__f__1
,其中包含元组元素的合理名称(like 代表元组 3,第一个元素)。
但是,通过优化,我优化了随机元组元素名称,例如N1
, lj
, mj
。
目前,我使用这个 hack 可以处理未优化和优化的代码。
javascript:
let fen = result.T3__f__1 || result.Nl
let legalMovesUcis = result.T3__f__2 || result.lj
let sanMoves = result.T3__f__3 || result.mj
但是,我担心这些随机名称并不稳定,并且会在代码更改时发生变化。
那么如何安全地解码从 Scala.js 返回的元组呢?
解决方案
您无法在 JavaScript 代码中解码从 Scala.js 返回的 Scala 元组。相反,您可以js.Tuple3
从 Scala.js 返回 a,JavaScript 将能够自然地使用它:
@JSExportTopLevel("makeUciMovesScala")
def makeUciMovesScala(
variantKeyOptJs: js.UndefOr[String],
fenOptJs: js.UndefOr[String],
ucisJs: js.UndefOr[js.Array[String]]
): js.Tuple3[js.UndefOr[String], js.Array[String], js.Array[String]] = ...
let fen = result[0];
let legalMovesUcis = result[1];
let sanMoves = result[2];
或者,如果您可以在 JavaScript 中使用数组解构:
let [fen, legalMovesUcis, sanMoves] = result;
以上通常适用于所有 Scala 类,除了一些原始数据类型。你总是需要给 JavaScript 一些它可以理解的东西。它可以是 JavaScript 类型,如上所述,或者提供@JSExport
ed 成员的 Scala 类的实例。
推荐阅读
- regex - Ansible regrex 插入或匹配问题
- excel - 匹配两个数字集时返回部分 int 值
- python-3.x - Python Reportlab 自动换行表
- mysql - Laravel - 获取多个 withCount() 的总和
- amazon-web-services - Redshift自动增量不起作用开始负数
- python - N维数组变成单个数组?
- python - 这个例子中的加号有什么作用?
- c - 与传感器 CCS 编译器的 I2C 通信
- python - Python - 函数循环(多次重复使用输出作为输入)
- google-app-engine - Google App Engine YAML 资源配置不起作用