在 Scala.js 中使用 JS 值的真实性的最佳方法是什么?



在JavaScript中,编写类似的东西非常容易(且清晰易读(

var a = getString(); // say, some string, possibly null or undefined
var b = fallback(); // fallback value
var c = a || b;

在 Scala.js 中,我能做得比这更好,拥有相同的语义吗?

val a: UndefOr[String] = getString()
val b: String = fallback()
val c = a.filter(_ != null).getOrElse(b)

JS中的真实性很棘手。例如,空字符串与nullundefined一样虚假。因此,您的两个示例并不等同。根据您的描述,我希望第二个更正确。你的要求,有点证明了真实性是危险的。

你的第二个片段很好。如果你真的在与一个使用nullundefined为空的库进行接口(这已经很可疑了,即使对于 JS;通常它会是一个另一个,但不是两个(,那么我建议你定义一个小的辅助函数:

def fromJSWithNullOrUndefined[A](x: js.UndefOr[A]): Option[A] =
x.toOption.filter(_ != null)

它一劳永逸地编码nullundefined都应该映射到None的特殊行为,然后按如下方式使用它:

val c = fromJSWithNullOrUndefined(getString()).getOrElse(fallback())

Scala开发人员会发现这比开始时的||代码更具可读性。它更惯用。

相关内容

  • 没有找到相关文章

最新更新