在 Scala.JS 中是否有调用我 运行 所在的平台?
In Scala.JS is there a call to get the platform I'm running on?
我有一些 Scala 代码用于我为 JVM 和 ScalaJS 编译的库。
现在我有一个 "pure" 项目,在 js 和 jvm 项目中没有特殊代码,由于 intellij 集成和其他一些因素,我想保持这种状态。
但是,我确实有一小部分代码(1-2 行)需要根据我是在 JVM 还是 JS 中进行更改。我想要一个简单的方法来完成这个不需要我改变我的整个项目结构。
基本上我想要一个电话 "isJS" 如果我在 JavaScript 则 returns 为真,否则为假。
没有任何标准,因为它需要扩展 JVM 上可用的 API,而 Scala.js 做不到。
您可以使用 object Platform
在 js/
和 jvm/
子项目中使用两个不同的实现轻松地自行构建它。例如对于 JS 它将是:
object Platform {
final val isJS = true
final val isJVM = false
}
当然要非纯。您还可以在一个仅提供该功能的小型库中对其进行抽象。例如,catalysts 的 platform
项目就是这样做的。
如果你想保持完全的纯粹和没有依赖,你必须诉诸黑客:
val isJS = 1.0.toString == "1"
这是可行的,因为在 JVM 上,1.0.toString
returns "1.0"
,但在 JS 上它 returns "1"
.
你可以这样做:
val isJS = System.getProperty("java.vm.name") == "Scala.js"
我有一些 Scala 代码用于我为 JVM 和 ScalaJS 编译的库。
现在我有一个 "pure" 项目,在 js 和 jvm 项目中没有特殊代码,由于 intellij 集成和其他一些因素,我想保持这种状态。
但是,我确实有一小部分代码(1-2 行)需要根据我是在 JVM 还是 JS 中进行更改。我想要一个简单的方法来完成这个不需要我改变我的整个项目结构。
基本上我想要一个电话 "isJS" 如果我在 JavaScript 则 returns 为真,否则为假。
没有任何标准,因为它需要扩展 JVM 上可用的 API,而 Scala.js 做不到。
您可以使用 object Platform
在 js/
和 jvm/
子项目中使用两个不同的实现轻松地自行构建它。例如对于 JS 它将是:
object Platform {
final val isJS = true
final val isJVM = false
}
当然要非纯。您还可以在一个仅提供该功能的小型库中对其进行抽象。例如,catalysts 的 platform
项目就是这样做的。
如果你想保持完全的纯粹和没有依赖,你必须诉诸黑客:
val isJS = 1.0.toString == "1"
这是可行的,因为在 JVM 上,1.0.toString
returns "1.0"
,但在 JS 上它 returns "1"
.
你可以这样做:
val isJS = System.getProperty("java.vm.name") == "Scala.js"