如何在 sbt 中使用自己的类型而不是 scala 标准类型?
How to use own types instead of scala standard types in sbt?
我有以下学习。
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 只使用我的?
在 SBT 控制台 中,在尝试使用之前导入您的 class:
scala> import learning.laziness.Stream
scala> Stream(1, 2)
scala> //etc.
您的 Stream
class 的代码必须位于 SBT 源文件夹下(默认情况下,这将是 src/main/scala
,相对到项目根目录,或在 SBT scalaSource in Compile
指令指定的自定义源目录中 - 它不会被 SBT[=26 找到和编译=] 否则)。由于您提供的代码在包 learning.laziness
中,因此 Stream.scala
源文件的默认位置需要是 src/main/scala/learning/laziness
。一旦 SBT 知道在哪里可以找到您的文件,您就应该没问题了。
我有以下学习。
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 只使用我的?
在 SBT 控制台 中,在尝试使用之前导入您的 class:
scala> import learning.laziness.Stream
scala> Stream(1, 2)
scala> //etc.
您的 Stream
class 的代码必须位于 SBT 源文件夹下(默认情况下,这将是 src/main/scala
,相对到项目根目录,或在 SBT scalaSource in Compile
指令指定的自定义源目录中 - 它不会被 SBT[=26 找到和编译=] 否则)。由于您提供的代码在包 learning.laziness
中,因此 Stream.scala
源文件的默认位置需要是 src/main/scala/learning/laziness
。一旦 SBT 知道在哪里可以找到您的文件,您就应该没问题了。