2010-12-15 132 views
2

est de la source de la bibliothèque standard Scala de 2.8.1Scala: Est-ce une erreur dans le trait LinkedListLike? Ce

/** Append linked list `that` at current position of this linked list 
    * @return the list after append (this is the list itself if nonempty, 
    * or list `that` if list this is empty.) 
    */ 
    def append(that: This): This = { 
    @tailrec 
    def loop(x: This) { 
     if (x.next.isEmpty) x.next = that 
     else loop(x.next) 
    } 
    if (isEmpty) that 
    else { loop(repr); repr } 
    } 

    /** Insert linked list `that` at current position of this linked list 
    * @note this linked list must not be empty 
    */ 
    def insert(that: This): Unit = { 
    require(nonEmpty, "insert into empty list") 
    if (that.nonEmpty) { 
     next = next.append(that) 
    } 
    } 

ne devrait pas cette dernière ligne est next = that.append(next)? (c'est-à-dire mettre le reste de cette liste à la fin de la liste que nous insérons?

Si non, pourquoi? Le code ajoute actuellement la liste que nous insérons à la fin de la liste actuelle - c'est à dire même comme apppend.

Répondre

3

Je pense qu'il est un known bug.

scala> import scala.collection.mutable._ 
import scala.collection.mutable._ 

scala> val foo = LinkedList(1, 2, 3, 4) 
foo: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4) 

scala> foo.next insert LinkedList(5, 6, 7, 8) 

scala> foo 
res2: scala.collection.mutable.LinkedList[Int] = LinkedList(1, 2, 3, 4, 5, 6, 7, 8) 

S'il est supposé insérer LinkedList(5, 6, 7, 8) dans la "position actuelle", le résultat final devrait être LinkedList(1, 5, 6, 7, 8, 2, 3, 4).

+0

Eh oui, qui est celui de 2,8. .1 seulement, il semble. Peut-être que je commence pour comprendre cette chose Scala :) –