在Scala.JS有一个电话,让我正在运行的平台?

时间:2016-04-22 15:22:14

标签: scala.js

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

现在我有一个纯粹的"项目,在js和jvm项目中没有特殊代码,并且由于intellij集成和其他一些因素,我希望保持这种方式。

但是,我确实有一小部分代码(1-2行)需要根据我是否在JVM或JS中进行更改。我想要一个简单的方法来完成这个并不需要我改变整个项目结构。

基本上我喜欢打电话" isJS"如果我在JavaScript上,则返回true,否则返回false。

2 个答案:

答案 0 :(得分:5)

没有任何标准,因为它需要扩展JVM上可用的API,而Scala.js不能这样做。

您可以使用object Platformjs/子项目中的两个不同实现的jvm/来轻松自行构建。例如,JS就是:

object Platform {
  final val isJS = true
  final val isJVM = false
}

当然,这需要非纯粹。您还可以在仅提供该功能的小型库中对其进行抽象。例如,catalystsplatform项目就是这样做的。

如果你想保持完全纯洁而不依赖,你必须求助于黑客攻击:

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"