2013-08-25 84 views
17

为什么queue.get()返回empy列表?斯卡拉。获取列表的第一个元素

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()) 
    } 
} 

我如何得到第一个元素?

+3

在您学习时,您可能会发现明确写出超出必需类型的数据是很有用的。在这种情况下,如果你编写了'def get():Int {this.queue.head}',编译器会告诉你get方法有问题。 –

回答

24

它没有返回空列表,它返回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

+3

由于存在这样的错误,我们正在讨论关于弃用过程语法'def proc(...){...}'以支持完整形式的def proc(...):Unit = {...} 。参见https://groups.google.com/forum/?fromgroups=#!topic/scala-debate/8G3WgfZNj9E – ghik

2

有时它可以很好的使用

取1

,而不是头,因为它不造成空列表异常并再次返回一个空列表。

+7

'headOption'更好,因为它不使用任何魔术常量(1),并且它返回一个类型('Option [T]'),静态保证其最大大小为1。 –

相关问题