Что такое трейт08.05.2025, 18:13. Показов 1715. Ответов 17
Метки нет (Все метки)
Посмотрел я видик про язык Rust. Сейчас про него много говорят. Трейты вот что там есть и это то чего не хватает Твин-бейсику (и любому др. языку). Трейт, это такая штука, если я правильно понял, которая позволяет добавить любому типу как бы дополнительный метод. По моему это что-то реальное.
0
|
|
| 08.05.2025, 18:13 | |
|
Ответы с готовыми решениями:
17
Что такое "прелюдия" и что в ней изменилось?
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 08.05.2025, 21:34 | |
|
testuser2, ничего не понял
0
|
|
| 09.05.2025, 01:41 [ТС] | |||||||
|
Добавлено через 2 минуты
1
|
|||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 09.05.2025, 02:19 | |
|
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 09.05.2025, 18:40 | |
|
testuser2, ничего не понял короче
1
|
|
|
Модератор
|
||||||||||||||||||
| 10.05.2025, 15:50 | ||||||||||||||||||
Сообщение было отмечено Catstail как решение
Решение
2
|
||||||||||||||||||
| 10.05.2025, 18:39 [ТС] | |||
|
alecss131, спасибо за наглядные примеры, да, действительно, трейты это такж как протокол и расширения в Свифте. Свифт силен, да. Мне также понравилось как многое выглядит в Расте. Там всюду краткие названия, в это тоже есть определеный прикольчик. Понятное слово &self и здесь тоже все понятно
В, принцпие, наверное, эти скобочки "{}", в этом тоже, что-то есть, то что не мешается тект и переменные в одну кучу.. Добавлено через 9 минут В свифте эта строка выглядит лучше, в расте какое-то нагромождение name: String::from("Tom")
0
|
|||
|
Модератор
|
|||||||
| 10.05.2025, 19:14 | |||||||
А ещё, в Haskell они же называются классы типов.
1
|
|||||||
| 10.05.2025, 19:33 [ТС] | |||||||
|
Из приведенных примеров виден такой плюс Раста, что он как бы все проговаривает, допустим здесь он говорит, что функция в расширении принимает аргумент &self, невидимый. Наверное можно и не передавать этот аргумент и наверное последующие аргументы уже должны быть видимые.. это, конечно уже другой вопрос.
0
|
|||||||
|
Модератор
|
||||||
| 11.05.2025, 11:52 | ||||||
|
Только вот я бы сказал что использование подобного расширения плохая практика, так как сущность может определяться в одном месте, а расширяться совсем в другом, что очень сильно усложняет понимание кода.
Все же главное использование протоколов в свифте такое
Не знаю можно ли так делать в ржавчине, с языком не знаком. И разумеется это для передачи и получения определенных типов из функций. То есть прямой функционал интерфейсов. Например в функцию вида func show(printer: Printer) подойдет и такое определение struct Person: Printer и такое расширение extension Person: Printer
0
|
||||||
| 11.05.2025, 14:10 [ТС] | ||
|
Вот я как вижу со своей примитивной точки зрения, что берешь, допустим вводишь переменную любого типа, сложного/простого,
Добавлено через 7 минут
0
|
||
|
Невнимательный
|
|||
| 11.05.2025, 14:43 | |||
|
В нормальных языках, типа php,)) это такая штука, которая позволяет расширять классы не только наследованием, но и со стороны тянуть трейты... точно так же, переопределяя или нет методы ... если они не абстрактные. Не знаю как в Rust, но если верить докам php, то похоже и там это тоже просто способ юзать множественное наследование
кроме того что одно как-бы вертикальные расширения, а второе горизонтальные + возможность переопределение трейтом того что в родительском +возможность разрешения конфликтов имён ... Такие нюансы наверное надо почаще смотреть в доках... таких языков которые всё время чего-то пилят-перепиливают )
0
|
|||
| 11.05.2025, 16:27 [ТС] | ||
|
0
|
||
|
46 / 38 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
|
| 11.05.2025, 16:45 | |
Сообщение было отмечено testuser2 как решение
Решение
>Не знаю, как переопределять или что-то мутировать, это кажись, не очень тема, чреватая путаницами, а вот что-то додолнять, притом статически прописанными протоколами, трейтами или чем-либо еще, это немножко наверно другое, и главное не путать возмжоности принципа, со злоупотреблением этим принципом.
Да, вцелом вы рассуждаете в русле современных тенденций в программировании. Сейчас идёт отход от расширения типов в пользу возможности определения своих методов, связанных с типом, в любом месте программы. Так можно делать в Ruste и в Delphi / Free Pascal. Добавлено через 9 минут Rust - язык очень хитрый. Он отказывается от технологий объектно-ориентированного программирования (в нём нет расширения типов, полиморфизма, а инкапсуляция производится другим способом) и использует другую технологию для программирования абстракций. Эта технология более простая, но в то же время более надёжная. В Ruste нет таких проблем как в объектно-ориентированных языках как хрупкость базового класса, раздутость таблицы виртуальных методов при глубокой иерархии объектов, неоднозначность при множественном наследовании и других.
2
|
|
|
Модератор
|
||
| 11.05.2025, 20:55 | ||
|
0
|
||
| 13.05.2025, 13:53 [ТС] | ||
|
0
|
||
|
46 / 38 / 10
Регистрация: 25.02.2025
Сообщений: 84
|
|||||||||||
| 13.05.2025, 16:53 | |||||||||||
|
При помощи трейтов можно, с одной стороны, реализовать в некоторой степени аспектно-ориентированное программирование, когда в класс внедряется дополнительная функциональность без изменения кода класса, с другой стороны можно реализовать наследование без расширения типов (наследование в силе mix-in, примеси).
Всё это из-за недостатков объектно-ориентированного программирования придумывают. Про недостатки: https://tproger.ru/translation... r-disaster https://habr.com/ru/articles/885980/ https://habr.com/ru/companies/nmg/articles/737200/ Также при помощи трейтов по-другому реализуется инкапсуляция. Инкапсуляция - сокрытие внутренней структуры объекта. В объектно-ориентированном программировании сокрытие организуется при помощи спецификаторов доступа. Если ставите private - то извне нет доступа. Однако при таком подходе возникают определённые проблемы. В Rustе трейт ничего не инкапсулирует, он только лишь определяет абстрактный тип и методы работы с этим типом. Допустим мы хотим сделать очередь с двумя методами put (положить) и get (взять). Мы создаём модуль myqueue (то есть крейт) и в нём описываем трейт Очередь. Трейт общедоступен извне, а конкретная реализация очереди - недоступна. Вот файл myqueue:
Функция new - доступна извне модуля, она создаёт объект очереди и возвращает его. Вот использование очереди из другого модуля:
Rc - это интеллектуальный указатель (для автоматического освобождения памяти).
1
|
|||||||||||
| 13.05.2025, 16:53 | |
|
Помогаю со студенческими работами здесь
18
Что я делаю не так или как запустить свою первую прогу на Perl? Объединить два списка в один так, чтобы элементы второго списка, которые есть в первом, в новом списке не были Написать программу объединения двух списков в третий так, чтобы нечетные (по номеру) элементы были из первого вписка, а четные - из второго. Вывести текст так, чтобы в каждой строке на выходе было не более, чем W символов Удаление начала списка до заданного элемента (включительно) Что деаю н так? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|