【问题标题】:Scala. Get first element of List斯卡拉。获取列表的第一个元素
【发布时间】:2018-12-26 20:47:25
【问题描述】:

为什么queue.get() 返回空列表?

class MyQueue{
  var queue=List[Int](3,5,7)

  def get(){
    this.queue.head
  }
}

object QueueOperator {
  def main(args: Array[String]) {
    val queue=new MyQueue
    println(queue.get())
  }
}

如何获得第一个元素?

【问题讨论】:

  • 在你学习的时候,你可能会发现显式写出比必要的更多的类型很有用。在这种情况下,如果您编写了def get(): Int { this.queue.head },编译器会告诉您get 方法存在问题。

标签: scala list


【解决方案1】:

它不是返回空列表,而是返回Unit(一个零元组),它在Scala 中相当于Java 中的void。如果它返回空列表,您会看到List() 打印到控制台而不是()(空元组)。

问题是您的get 方法使用了错误的语法。您需要使用= 来表示get 返回一个值:

def get() = {
  this.queue.head
}

或者这可能更好:

def get = this.queue.head

在 Scala 中,对于没有副作用的空函数,您通常不使用括号(参数列表),但这要求您在调用 queue.get 时也不要使用括号。

您可能想快速浏览一下Scala Style Guide,特别是section on methods

【讨论】:

【解决方案2】:

有时候会很好用

拿 1

而不是head,因为它不会导致空列表异常并再次返回一个空列表。

【讨论】:

  • headOption 更好,因为它不使用任何魔法常量 (1),它返回一个静态保证最大大小为 1 的类型 (Option[T])。跨度>
猜你喜欢
  • 2016-12-31
  • 2019-04-19
  • 2020-07-31
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多