使用完全优化时如何访问 Scala.js 中返回的元组的字段?
How can I access the fields of a returned tuple in Scala.js when using full optimization?
Scala 函数的签名是。
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
,代表元组 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 元组 return。相反,您可以 return 来自 Scala.js 的 js.Tuple3
,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 类 实例。
Scala 函数的签名是。
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
,代表元组 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 元组 return。相反,您可以 return 来自 Scala.js 的 js.Tuple3
,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 类 实例。