Scala:来自 Main 的用例 class

Scala: use case class from Main

在我的项目中有一个主要对象:

object Main extends App {
  println("Hello world")
}

还有一个:

object Abc {
  abstract class BAbcTest
  case object Meow extends BAbcTest

  ...


  def domeow(b: BAbcTest): BAbcTest = b match { ... }
}

如何从 Main 呼叫 domeow?我正在使用 sbt,当我在那里输入 run 时,它只打印 "Hello World."。

我试图在 Main 对象中写 domeow(Meow) 但它一直说

not found: value Meow

只需在 Main 对象内执行 Abc.domeow(Abc.Meow)Main 中的所有内容都将在 main method 中作为 Main extends App.

执行

您必须执行 Abc.Meow 才能从 Main 对象或 import Abc 中使用 import Abc._ 引用 Meow 对象Main

 object Main extends App {
    println("Hello world")
    Abc.domeow(Abc.Meow)
  }

或导入Abc._

object Main extends App {
    println("Hello world")

    import Abc._

    Abc.domeow(Meow)
  }


  object Abc {
    abstract class BAbcTest
    case object Meow extends BAbcTest
    def domeow(b: BAbcTest): BAbcTest = b match { case Meow => Meow }
  }

Main 对象内执行 Abc.test(1)

作为 Main 扩展 App。 Main 中的所有代码都将在对象 Mainmain 方法中执行。因此,当您执行 sbt run 时, Main 对象中的所有代码都会执行。

object Main extends App {
  println("Hello world")
  println(Abc.test(1))
}

object Abc {
  def test(a: Int): Int = a match { ... }
}

Scala REPL

scala> object Abc {
    def test(a: Int): Int = a match { case 1  => 1}
  }
defined object Abc

scala> object Main extends App {
    println("Hello world")
    println(Abc.test(1))
  }
defined object Main

scala< Main.main(Array(""))
Hello world
1