在Scala.JS中有一个调用来获取我正在运行的平台吗?

Dav*_*rio 1 scala.js

我有一些Scala代码用于库,我为JVM和ScalaJS编译.

现在我有一个"纯"项目,在js和jvm项目中没有特殊代码,我想保持这种方式,因为intellij集成和其他一些因素.

但是,我确实需要根据我是在JVM还是JS中来改变一小段代码(1-2行).我想要一个简单的方法来实现这一点,这不需要我改变我的整个项目结构.

基本上我想要一个调用"isJS",如果我使用JavaScript则返回true,否则返回false.

sjr*_*jrd 5

没有任何标准,因为它需要扩展JVM上可用的API,而Scala.js无法做到这一点.

您可以轻松地用一个小小的建立它自己object Platform在两个不同的实现js/jvm/子项目.例如对于JS,它将是:

object Platform {
  final val isJS = true
  final val isJVM = false
}
Run Code Online (Sandbox Code Playgroud)

当然,这需要非纯粹.您还可以在仅提供该功能的小型库中对其进行抽象.例如,这就是催化剂platform项目的作用.

如果你想保持完全纯粹而不依赖,你必须诉诸于黑客:

val isJS = 1.0.toString == "1"
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为在JVM上1.0.toString返回"1.0",但在JS上返回"1".