如何解决使用完全优化时,如何在Scala.js中访问返回的元组的字段?
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元组。相反,您可以从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类的实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。