ScalaJS:如何从 JS 创建 Option[A]?
ScalaJS: How to create Option[A] from JS?
我有一个 ScalaJS 函数,我想从 JS 调用它,它有一个 Option[String] 参数。我不知道如何从 JS 创建 Some[String] 和 None[String]。
简答:你不能。不过,您的问题有两种解决方案。
公开全局函数以构造 Some
并检索 None
(次优)
在您的 Scala.js 代码库中添加这样的对象:
package some.pack
@JSExport
object OptionFactory {
@JSExport
def none(): None.type = None
@JSExport
def some[A](value: A): Some[A] = Some(value)
}
您现在可以使用 JS 中的工厂来创建选项:
var none = some.pack.OptionFactory.none()
var some = some.pack.OptionFactory.some(5)
直接公开一个API操纵js.UndefOr
(推荐)
您可以直接从您的 Scala.js class 公开一个 JS 友好的 API,而不是强制 JS 操纵 Option
s。假设您要公开的函数类似于:
def foo(opt: Option[Int]): Unit = ???
您可以改为或另外导出以下 JS 友好版本:
@JSExport
def foo(opt: js.UndefOr[Int]): Unit = foo(opt.toOption)
这将允许 JS 简单地使用 undefined
表示 None
和任何整数表示 Some[Int]
,例如:
scalaJSObj.foo(undefined)
scalaJSObj.foo(5)
我有一个 ScalaJS 函数,我想从 JS 调用它,它有一个 Option[String] 参数。我不知道如何从 JS 创建 Some[String] 和 None[String]。
简答:你不能。不过,您的问题有两种解决方案。
公开全局函数以构造 Some
并检索 None
(次优)
在您的 Scala.js 代码库中添加这样的对象:
package some.pack
@JSExport
object OptionFactory {
@JSExport
def none(): None.type = None
@JSExport
def some[A](value: A): Some[A] = Some(value)
}
您现在可以使用 JS 中的工厂来创建选项:
var none = some.pack.OptionFactory.none()
var some = some.pack.OptionFactory.some(5)
直接公开一个API操纵js.UndefOr
(推荐)
您可以直接从您的 Scala.js class 公开一个 JS 友好的 API,而不是强制 JS 操纵 Option
s。假设您要公开的函数类似于:
def foo(opt: Option[Int]): Unit = ???
您可以改为或另外导出以下 JS 友好版本:
@JSExport
def foo(opt: js.UndefOr[Int]): Unit = foo(opt.toOption)
这将允许 JS 简单地使用 undefined
表示 None
和任何整数表示 Some[Int]
,例如:
scalaJSObj.foo(undefined)
scalaJSObj.foo(5)