我正在阅读Scala中的功能编程一书并遇到了困难。这是代码:
package fpinscala.datastructures
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[A]) extends List[A]
object List {
def sum(ints: List[Int]): Int = ints match {
case Nil => 0
case Cons(x,xs) => x + sum(xs)
}
def product(ds: List[Double]): Double = ds match {
case Nil => 1.0
case Cons(0.0, _) => 0.0
case Cons(x,xs) => x * product(xs)
}
def apply[A](as: A*): List[A] =
if (as.isEmpty) Nil
else Cons(as.head, apply(as.tail: _*))
val example = Cons(1, Cons(2, Cons(3, Nil)))
val example2 = List(1,2,3)
val total = sum(example)
}
代码来自第3章,名为"清单3.1单链表。"
我的问题首先是,使用IntelliJ中的工作表,我从package语句中收到一条警告消息,告诉我包名称与目录结构不对应。教科书没有提供有关如何处理此问题的任何信息。这是本书中第一次使用package语句,并且没有讨论"目录结构"任何地方。
我的第二个问题是代码没有产生任何" Res0"或者在我期望找到某些东西的右边的任何东西。像总数:Int 6或类似的东西。任何指针,建议?
答案 0 :(得分:2)
我的猜测是,本书是指 Eclipse IDE 的工作表,而不是 IntelliJ IDEA 的工作表。这些是独立的产品,都有工作表,但they work slightly differently。
在IntelliJ中,你根本不会使用包(如果我没有弄错的话)。此外,object
的内容未在右侧进行评估。相反,只需将您要评估的内容(example
,example2
,total
)移至顶级。
不幸的是,由于scala.Nil
和scala.List
(来自标准库)的存在,也存在一些突出显示错误,尽管工作表正确评估。我只是将它们重命名为MyList
和MyNil
。
答案 1 :(得分:0)
我的问题是,首先,使用IntelliJ中的工作表,我收到警告 来自package语句的消息告诉我包名称没有 对应于目录结构。
创建一个名为fpinscala
的目录,并在其中创建另一个名为datastructures
的目录,并将您的类放在第二个目录中。或者您可以通过在警告消息上按Ctrl+Enter
从intellij请求为您执行此操作。