Я нашел пример построения кода LinkedList
с нуля в Scala, и я не мог понять последнюю строку в примере. Вот пример:Объяснение Scala LinkedList code
scala> class MyList (val head : Any, val tail : MyList) {
| def isEmpty = (head == null && tail == null)
| def length : Int = if (isEmpty) 0 else 1 + tail.length
| override def toString: String = if (isEmpty) "" else head + " " + tail
| }
defined class MyList
scala> var list = new MyList (null, null)
list: MyList =
scala> list.length
res3: Int = 0
scala> list.isEmpty
res4: Boolean = true
scala> list = new MyList ("ABC", list)
list: MyList = ABC
scala> list.length
res5: Int = 1
scala> list.isEmpty
res6: Boolean = false
scala> list = new MyList("XYZ", list)
list: MyList = XYZ ABC
scala> list = new MyList ("123", list)
list: MyList = 123 XYZ ABC
scala> list.tail.head
res7: Any = XYZ
Я не понимаю, почему list.tail.head
печатает "XYZ". На самом деле я не могу объяснить, что list.tail.head
должен печатать априори с учетом определения class MyList
, как указано. Любая помощь в понимании происходящего будет оценена по достоинству.
Ах! Я не знал, что параметры конструктора автоматически определяют публичные члены. И запись структуры данных MyList в конце помогла прояснить картину очень. благодаря!! shouldnt последний хвост будет хвостом = MyList (head = null tail = null). если да, то, если вы сделаете это редактирование, я могу принять ваш ответ. – algorithmic
Они определяют геттеры и/или сеттеры, если вы используете 'val' или' var' в определении, иначе нет. Да, я должен это исправить – ColOfAbRiX