【问题标题】:How to use own types instead of scala standard types in sbt?如何在 sbt 中使用自己的类型而不是 scala 标准类型?
【发布时间】:2017-12-18 22:11:01
【问题描述】:

我有以下学习。

package learning.laziness

sealed trait Stream[+A] {
  def headOption: Option[A] = this match {
    case Empty => None
    case Cons(h, _) => Some(h())
  }

  def toList: List[A] = this match {
    case Empty => List.empty
    case Cons(h,t) => h()::t().toList
  }
}
case object Empty extends Stream[Nothing]
case class Cons[A](head: () => A, tail: () => Stream[A]) extends Stream[A]

object Stream {
  def cons[A](hd: => A, tl: => Stream[A]): Stream[A] = {
    lazy val head = hd
    lazy val tail = tl
    Cons(() => head, () => tail)
  }
  def empty[A]: Stream[A] = Empty
  def apply[A](as: A*): Stream[A] =
    if (as.isEmpty) empty else cons(as.head, apply(as.tail: _*))
}

当我通过sbt console 加载 REPL 并输入示例时

  • Stream(1,2)
    • res0: scala.collection.immutable.Stream[Int] = Stream(1, ?)
  • Stream.apply(1,2)
    • res1: scala.collection.immutable.Stream[Int] = Stream(1, ?)
  • Stream.cons(1, Stream.cons(2, Stream.empty))
    • res2: Stream.Cons[Int] = Stream(1, ?)

它在前两种情况下使用来自 scala.collection.immutable 的 Stream 而不是我的。我怎样才能让 sbt 只使用我的?

【问题讨论】:

    标签: scala sbt read-eval-print-loop


    【解决方案1】:

    SBT 控制台中,在尝试使用之前导入您的类:

    scala> import learning.laziness.Stream
    scala> Stream(1, 2)
    scala> //etc.
    

    您的Stream 类的代码必须位于SBT 源文件夹下(默认情况下,这将是src/main/scala,相对于项目根目录,或者位于由SBT scalaSource in Compile 指令 - 否则 SBT 不会找到并编译它)。由于您提供的代码位于包learning.laziness 中,因此Stream.scala 源文件的默认位置需要为src/main/scala/learning/laziness。一旦 SBT 知道在哪里可以找到您的文件,您应该就可以了。

    【讨论】:

    • 这给了我一个错误:scala> import learning.laziness.Stream <console>:11: error: not found: value learning import learning.laziness.Stream
    • @mrt181 您的 SBT 是否有机会构建多项目构建?
    • 不,我的 build.sbt 只有这个scalaVersion := "2.12.2"
    • @mrt181 您的 Stream 类的位置在哪里?如果您遵循标准约定,它应该位于 src/main/scala/learning/laziness/Stream.scala 中,相对于您的项目的根目录。如果是这样,我指定的代码应该可以工作;如果不是,那么你的 Stream 源代码在哪个目录?
    • 它位于src/learning/laziness/Stream.scala。修复后它通过导入我的代码来工作。您能否更新您的答案,以便我接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2023-03-13
    • 2018-12-16
    • 1970-01-01
    相关资源
    最近更新 更多