我有一些Scala代码用于库,我为JVM和ScalaJS编译。
现在我有一个纯粹的"项目,在js和jvm项目中没有特殊代码,并且由于intellij集成和其他一些因素,我希望保持这种方式。
但是,我确实有一小部分代码(1-2行)需要根据我是否在JVM或JS中进行更改。我想要一个简单的方法来完成这个并不需要我改变整个项目结构。
基本上我喜欢打电话" isJS"如果我在JavaScript上,则返回true,否则返回false。
答案 0 :(得分:5)
没有任何标准,因为它需要扩展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
返回"1.0"
,但在JS上它返回"1"
。
答案 1 :(得分:1)
你可以这样做:
val isJS = System.getProperty("java.vm.name") == "Scala.js"