ListNode[A: A]
Узел в двусвязном списке.
(См. класс collections.List Ponylang для примеров использования.)
Каждый узел содержит четыре поля: два поля ссылки (ссылки на предыдущий и следующий узел в последовательности узлов), одно поле данных и ссылку на список, в котором он находится.
Как ожидается, предоставляются функции для создания ListNode, обновления содержимого ListNode и извлечения элемента из ListNode.
Предоставляются дополнительные функции для работы с ListNode как частью связанного списка. Они обеспечивают предварительное добавление, добавление в конец, удаление и безопасное перемещение в обоих направлениях. Класс collections.List Ponylang является правильным способом создания этих элементов. Не пытайтесь создать связанный список, используя только ListNodes.
Пример программы
Функции, проиллюстрированные ниже, — это только те, которые работают с отдельным ListNode.
Вывод:
Мой узел имеет значение элемента: Мой элемент узла Мой узел имеет обновленное значение элемента: Обновленный элемент узла Элемент извлечён из ListNode Элемент узла ListNode отсутствует (None).
use "collections"
actor Main
new create(env:Env) =>
// Create a new ListNode of type String
let my_list_node = ListNode[String]("My Node item")
try
env.out.print("My node has the item value: "
+ my_list_node.apply()?) // My Node item
end
// Update the item contained in the ListNode
try
my_list_node.update("My updated Node item")?
env.out.print("My node has the updated item value: "
+ my_list_node.apply()?) // My updated Node item
end
// Pop the item from the ListNode
try
my_list_node.pop()?
env.out.print("Popped the item from the ListNode")
my_list_node.apply()? // This will error as the item is now None
else
env.out.print("The ListNode has no (None) item.")
end
...
```pony
class ref ListNode[A: A]
Конструкторы
create
Создать узел. Изначально он не входит ни в какой список.
new ref create( item: (A | None val) = reference) : ListNode[A] ref^
Параметры
- item: (A | None val) = ссылка
Возвращает
- ListNode[A] ref^
Общедоступные функции
apply
Возвращает элемент, если он есть, иначе генерирует ошибку.
fun box apply() : this->A ?
Возвращает
- this->A ?
update
Заменяет элемент и возвращает предыдущий. Генерирует ошибку, если предыдущее значение отсутствует.
fun ref update( value: (A | None val)) : A^ ?
Параметры
- value: (A | None val)
Возвращает
- A^ ?
pop
Удаляет элемент из узла, если он есть, иначе генерирует ошибку.
fun ref pop() : A^ ?
Возвращает
- A^ ?
prepend
Добавляет узел в начало этого узла. Если that уже находится в списке, он удаляется перед добавлением в начало. Возвращает true, если that был удалён из другого списка. Если ListNode не содержится в списке, добавление в начало завершится неудачей.
fun ref prepend( that: ListNode[A] ref) : Bool val
Параметры
- that: ListNode[A] ref
Возвращает
- Bool val
append
Добавляет узел в конец этого узла. Если that уже находится в списке, он удаляется перед добавлением в конец. Возвращает true, если that был удалён из другого списка.
Если ListNode не содержится в списке, добавление в конец завершится неудачей.
fun ref append( that: ListNode[A] ref) : Bool val
Параметры
- that: ListNode[A] ref
Возвращает
- Bool val
remove
Удаляет узел из списка.
ListNode должен находиться в списке для успеха этой операции.
fun ref remove() : None val
Возвращает
- None val
has_prev
Возвращает true, если есть предыдущий узел.
fun box has_prev() : Bool val
Возвращает
- Bool val
has_next
Возвращает true, если есть следующий узел.
fun box has_next() : Bool val
Возвращает
- Bool val
prev
Возвращает предыдущий узел.
fun box prev() : (this->ListNode[A] ref | None val)
Возвращает
next
Возвращает следующий узел.
fun box next() : (this->ListNode[A] ref | None val)
Возвращает
© 2016-2020, The Pony Developers
© 2014-2015, Causality Ltd.
Licensed under the BSD 2-Clause License.
https://stdlib.ponylang.io/collections-ListNode