scala包的难度

时间:2016-01-08 21:20:24

标签: scala intellij-idea

我正在阅读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或类似的东西。任何指针,建议?

2 个答案:

答案 0 :(得分:2)

我的猜测是,本书是指 Eclipse IDE 的工作表,而不是 IntelliJ IDEA 的工作表。这些是独立的产品,都有工作表,但they work slightly differently

在IntelliJ中,你根本不会使用包(如果我没有弄错的话)。此外,object的内容未在右侧进行评估。相反,只需将您要评估的内容(exampleexample2total)移至顶级。

不幸的是,由于scala.Nilscala.List(来自标准库)的存在,也存在一些突出显示错误,尽管工作表正确评估。我只是将它们重命名为MyListMyNil

enter image description here

答案 1 :(得分:0)

  

我的问题是,首先,使用IntelliJ中的工作表,我收到警告   来自package语句的消息告诉我包名称没有   对应于目录结构。

创建一个名为fpinscala的目录,并在其中创建另一个名为datastructures的目录,并将您的类放在第二个目录中。或者您可以通过在警告消息上按Ctrl+Enter从intellij请求为您执行此操作。