В Scala.JS есть вызов, чтобы получить платформу, на которой я работаю?
У меня есть некоторый код Scala для библиотеки, который я компилирую для JVM и ScalaJS.
Прямо сейчас у меня есть "чистый" проект без специального кода в проектах js и jvm, и я бы хотел сохранить его таким образом из-за интеграции intellij и некоторых других факторов.
Тем не менее, у меня есть небольшой кусочек кода (1-2 строки), который нужно изменить в зависимости от того, нахожусь ли я в JVM или JS. Я бы хотел простой способ сделать это, не требуя изменения всей структуры моего проекта.
По сути, я хотел бы вызвать isJS, который возвращает true, если я использую JavaScript, и false в противном случае.
2 ответа
Нет ничего стандартного, так как для этого потребуется расширить API, доступный в JVM, чего не может сделать Scala.js.
Вы можете создать его самостоятельно с помощью крошечного object Platform
с двумя различными реализациями в js/
а также jvm/
подпроекты. Например, для JS это будет:
object Platform {
final val isJS = true
final val isJVM = false
}
Конечно, это должно быть не чисто. Вы также можете абстрагировать это в крошечной библиотеке, предлагающей только эту функцию. Это то, что platform
проект катализаторов делает, например.
Если вы хотите сохранить чистоту и отсутствие зависимости, вы должны прибегнуть к хаку:
val isJS = 1.0.toString == "1"
Это работает, потому что на JVM 1.0.toString
возвращается "1.0"
, но на JS возвращается "1"
,
Ты можешь сделать:
val isJS = System.getProperty("java.vm.name") == "Scala.js"