gpt4 book ai didi

scala.js - 使用不透明类型(Char 和 Long)

转载 作者:行者123 更新时间:2023-12-04 14:12:07 24 4
gpt4 key购买 nike

我正在尝试导出用于 JavaScript 的算法的 Scala 实现。我正在使用 @JSExport .该算法适用于 Scala CharLonginteroperability guide 中标记为不透明的值.

我想知道 (a) 这意味着什么; (b) 处理此问题的建议是什么。

我想这意味着我应该避免 CharLong并与 String 一起工作加上对长度的运行时检查(或者可能使用一个无形的 Sized 集合)和 Int反而。

但欢迎其他想法。

更多详情...

我正在查看的代码类型是:

@JSExport("Foo")
class Foo(val x: Int) {
@JSExport("add")
def add(n: Int): Int = x+n
}

...按预期工作: new Foo(1).add(2)生产 3 .

Long 替换类型同一个电话报告: java.lang.ClassCastException: 1 is not an instance of scala.scalajs.runtime.RuntimeLong (以及与采用和返回 Char 的方法类似的东西)。

最佳答案

不透明意味着

  • 没有对应的 JavaScript 类型
  • 无法从 JavaScript 创建该类型的值(除非有 @JSExport ed 构造函数)
  • 没有办法操作该类型的值(除了调用 @JSExport ed 方法和字段)

  • 仍然可以从 Scala.js 代码接收该类型的值,传递它,然后将其返回给 Scala.js 代码。也可以随时调用 .toString() , 因为 java.lang.Object.toString()@JSExport编。除了 toString() , 都不是 Char也不是 Long导出任何东西,所以你不能用它们做任何其他事情。

    因此,正如您所经历的,JavaScript 1不能用作 Scala.js Long ,因为它不是正确的类型。也不是 'a'有效 Char (但它是有效的 String )。

    因此,正如您自己推断的那样,您确实必须避免不透明类型,如果需要从 JavaScript 创建/操作它们,请改用其他类型。 Scala.js 端可以使用语言中的标准工具来回转换,例如 someChar.toIntsomeInt.toChar .

    选择哪种类型最好取决于您的应用。对于 Char ,可能是 IntString .对于 Long ,可能是 String ,一对 Int s,甚至可能 Double如果可能的值从不使用超过 52 位的精度。

    关于scala.js - 使用不透明类型(Char 和 Long),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27821841/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com