Estoy tratando de importar un módulo de clase JavaScript script.js en un programa scala main.scala y uso sus métodos add y divide .
Estoy usando scala.js para importar el script JS y SBT para compilar.
Sin embargo, cuando intento ejecutar el programa, obtengo los errores:
value add is not a member of example.MyType
value divide is not a member of example.MyType
¿Podría ayudarme a encontrar dónde está el problema?
¡Gracias por adelantado!
¡El código se ve así!
principal.scala
package example import scala.scalajs.js import scala.scalajs.js.annotation._ @js.native @JSImport("script.js","MyType") class MyType(var x:Double, var y:Double) extends js.Object { add(z: Int) divide(z: Int) } object Hello extends App { work() // Sum: 1, Divide: 6 @JSExport def work(): Unit = { val added = new MyType(1,2).add(3) println(s"Sum: $added,") // 1 val divided = new MyType(4,3).divide(2) println(s"Divide: $divided") // 6 } }secuencia de comandos.js:
class MyType { constructor(x, y) { this.x = x; this.y = y; } add(z){ let {x,y} = this; return x + y + z; } divide(z){ let {x,y} = this; return (x + y)/z; } }; module.exports = {MyType};plugins.sbt:
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.10.0") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.0.0")construir.sbt:
import Dependencies._ ThisBuild / scalaVersion := "2.13.8" ThisBuild / version := "0.1.0-SNAPSHOT" ThisBuild / organization := "com.example" ThisBuild / organizationName := "example" lazy val root = (project in file(".")) .settings( name := "add", libraryDependencies += scalaTest % Test ) enablePlugins(ScalaJSPlugin) scalaJSUseMainModuleInitializer := true // See https://www.scala-sbt.org/1.x/docs/Using-Sonatype.html for instructions on how to publish to Sonatype.Parece que tienes un poco confusa la sintaxis de Scala para definir métodos. add y divide debe declararse como
@js.native @JSImport("script.js","MyType") class MyType(var x:Double, var y:Double) extends js.Object { def add(z: Int): Double = js.native def divide(z: Int): Double = js.native }