【问题标题】:difficulty with scala packagescala包的困难
【发布时间】:2016-01-09 05:44:24
【问题描述】:

我正在阅读《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 中使用工作表时,我从包语句中收到一条警告消息,告诉我包名称与目录结构不对应。教科书没有提供有关如何处理此问题的任何信息。这是本书第一次使用包语句,没有任何地方讨论“目录结构”。

我的第二个问题是代码不会在我希望找到的右侧产生任何“Res0”或任何东西。 Like total: Int 6 或类似的东西。任何指针,建议?

【问题讨论】:

  • 虽然 scala 不需要包名和 sourcel 目录结构之间的对应关系,但是 java 语言需要,所以工作表可能假设一个 java 源代码树。

标签: scala intellij-idea


【解决方案1】:

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

在 IntelliJ 中,您根本不会使用包(如果我没记错的话)。 object 的内容也不会在右侧进行评估。相反,只需将您要评估的内容(exampleexample2total)移至顶层即可。

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

【讨论】:

  • 感谢您的努力,我会标记您的答案。您已经解决了包裹问题。我设法重现了您在此处提供的结果,除了最后一行:val total=sum(example),我必须将其注释掉才能获得除右侧空白页之外的任何内容。前四行,定义的特征......等都很好,例如和example2的结果很好。中间线 sum... 和 product... 没有出现,我收到一条错误消息,“未找到:value sum”(如果我尝试一下,则为 value product)。我错过了什么明显的东西吗?
  • 请注意,我将sumproduct 也移到了顶层。否则您需要致电val total = MyList.sum(example)
  • 再次非常感谢。在您明确指出之前,我没有注意到这一点。你做了很多事情来缓解我的挫败感。
【解决方案2】:

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

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

【讨论】:

  • 对不起,我尝试了你的两个建议,但都没有成功删除包警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 2019-06-14
  • 2017-03-24
  • 1970-01-01
相关资源
最近更新 更多