Метод __moveinit__
Определяйте, как перемещается ваш тип.
«Метод __moveinit__» — бесплатный урок Mojo Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Mojo Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Mojo Academy содержит 4 уроков всего.
Определение перемещения
Для перемещения значения Mojo вызывает специальный метод с именем __moveinit__. Он создаёт новый экземпляр, забирая старый. 🚚
Выполняется при передаче
При использовании оператора передачи с кареткой вызывается __moveinit__. Он переносит значение, а не дублирует его данные.
var b = a^ # calls __moveinit__Сигнатура метода
Метод получает новый экземпляр и исходное значение owned. Поскольку источник находится во владении, его можно непосредственно потребить.
fn __moveinit__(out self, owned existing: Self):
self.ptr = existing.ptrЗабрать, а не копировать
Суть в том, чтобы передать ресурсы, например указатель на данные в куче, от источника новому экземпляру, вместо повторного выделения памяти.
Без двойного освобождения
После перемещения источник не должен освобождать переданные им данные. Mojo управляет этим, поэтому буфером владеет ровно один экземпляр.
Дёшево для больших значений
Поскольку __moveinit__ перераспределяет владение, а не клонирует байты, перемещение огромного буфера почти ничего не стоит. В этом и заключается выигрыш в скорости.
Источник становится недействительным
После перемещения источник становится потреблённым. Mojo не позволит прочитать его, гарантируя, что Вы не обратитесь к перенесённым данным.
Часто создаётся автоматически
Как и при копировании, обычно Вам не нужно писать этот метод самостоятельно. Соответствие Movable позволяет Mojo автоматически создать поэлементный __moveinit__.
Когда писать его самостоятельно
Настраивайте __moveinit__, когда Ваш тип владеет ресурсом, требующим явной передачи, например указателем с ручным управлением.
Сочетается с копированием
Тип может определять и копирование, и перемещение. Тогда Mojo выбирает более дешёвый вариант — перемещение, если источник больше не нужен.
Обеспечивает дешёвую передачу владения
__moveinit__ делает передачу владения быстрой и безопасной. Благодаря ему значения проходят через программу без расточительного дублирования.
Быстрая проверка
Проверим инициализатор перемещения.
Итоги
__moveinit__ определяет, как ваш тип перемещается, дёшево передавая ресурсы новому экземпляру и поглощая исходный. 🎯
Часто задаваемые вопросы
Урок «Метод __moveinit__» бесплатный?
Да — полный текст урока «Метод __moveinit__» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Mojo Academy, подпишись на CoddyKit PRO. Курс Mojo Academy содержит 4 уроков всего.
Чему я научусь в уроке «Метод __moveinit__»?
Определяйте, как перемещается ваш тип. Ты практикуешь Mojo Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Mojo Academy?
Предыдущий опыт не требуется. Mojo Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Метод __moveinit__»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Mojo Academy?
Да. Каждый урок Mojo Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.