10.06.2021, 11:39 | #1 |
Участник
|
Как стандартный ListEnumerator получает ссылку на список?
Эпиграф:
щас глупую весч спрошу.Какой он, этот Слонопотам? Как стандартный ListEnumerator получает ссылку на список? сейчас единственный способ создать экземпляр класса ListEnumerator - это вызвать метод list.getEnumerator() ну, ок. пусть будет единственный. я так понимаю что метод list.getEnumerator() внутри создает экземпляр класса ListEnumerator и каким-то образом передает ссылку на енумерируемый список. А как он передает? каким методом? можно ли этот скрытый метод вызвать из x++? X++: List list = new list(Types::String) ListEnumerator le = list.getEnumerator(); while( le && le.moveNext() ) { this.addEnd(le.current()); } А вот как заимплементить Enumerator MapsIterator |
|
|
За это сообщение автора поблагодарили: belugin (5). |
10.06.2021, 12:03 | #2 |
Участник
|
Не знаю возможно ли как-то private метод класса ядра аксапты вызвать из X++
В любом случае не стоит это делать, так как в другом билде все может поломаться. А зачем вообще это ? Какая проблема изначально стоит ? |
|
10.06.2021, 12:17 | #3 |
Участник
|
а какой это метод?
проблема? проблем нет. как нет никаких вопросов как реализовать. уже реализовано. мне интересно как это работает. поэтому я задаю вопрос на форуме специалистов. задача - сделать свой энумератор, конечно. с блекджеком и фильтрами. ------------------------ Так и знал что об этом спросят. Ребяты, давайте я сразу предупрежу: попытки рассказывать в этой ветке о разнице между наследованием и композицией попытки рассказать как это можно реализовать по-другому и прочий оффтопик в этой ветке я буду удалять. есть желание обсуждать - создавайте отдельную ветку и обсуждайте на здоровье. в этой ветке вопрос: Как стандартный ListEnumerator получает ссылку на список? Последний раз редактировалось mazzy; 10.06.2021 в 12:21. |
|
10.06.2021, 12:40 | #4 |
Участник
|
В 365 у него internal конструктор.
internal ListEnumerator(List sourceList) |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
10.06.2021, 13:14 | #5 |
Участник
|
Цитата:
спасибо. а как в классических аксаптах? |
|
10.06.2021, 13:30 | #6 |
Участник
|
Цитата:
Сообщение от belugin
Ребята, не стоит вскрывать эту тему. Вы молодые, шутливые, вам все легко. Это не то. Это не Чикатило и даже не архивы спецслужб. Сюда лучше не лезть. Серьезно, любой из вас будет жалеть. Лучше закройте тему и забудьте, что тут писалось.
Меня приведёт к океану смерти, И я с полпути повернул обратно. С тех пор все тянутся предо мною Кривые, глухие окольные тропы… не совсем точное воспроизведение стихотворения «Трусость» японской поэтессы Акико Ёсано (1878—1942) в переводе Веры Марковой https://ru.wikipedia.org/wiki/%D0%97...B5%D1%82%D0%B0 |
|
10.06.2021, 14:11 | #7 |
Участник
|
Папа, не лазай в розетку. Это дети говорят. Уже пробовали.
|
|
10.06.2021, 14:34 | #8 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: mazzy (5). |
11.06.2021, 18:34 | #9 |
Участник
|
2005 год, mazzy предлагает внедрять аксапту без программирования, 2015 год, mazzy поработал в Microsoft, 2021 год, mazzy собирается делать в аксапте коллекции, которые не уступают стандартным! Я что-то упустил?
По теме: в баню как там оно в стандарте, потому что код размазан и большей частью скрыт, если хочется сделать свой Enumaretor то надо измерить скорость доступа к базовым коллекциям: Array и Container. Последний наверное медленней, потому что по сути им Damgaard изобрели JSON за долго до веб-революции, так как контейнер - это строка и на сериализацию и обратно уходит какое-то время. Моя идея такая, что нужно вычислить максимальную скорость работы самых базовых примитивов и на этом писать свой Enumerator с фильтрами, куртизанками, Илоном Маском и Рогозиным |
|
11.06.2021, 18:50 | #10 |
Участник
|
Цитата:
1. 2005 - Майкрософт поддерживает и развивает Аксапту 2021 - Майкрософт НЕ поддерживает и НЕ развивает классические Аксапты, для которых... 2. ...mazzy уже давно делает энумераторы (не коллекции!!!!), которые... 3. ...значительно превосходят стандартные! ------------ И еще. На меня очень сильно повлиял вовсе не Microsoft, а работа в команде Ивана Захарова, особенно с db. Ребяты, очень вам признателен. ------------ Цитата:
Цитата:
я все больше склоняюсь к X++оберткам вокруг .net-овских классов. (особенно в части regexp...) но для этого надо понять, а можно ли таки сделать что-то вменяемое со стандартными объектами классических аксапт. в стандарте слишком много сил положено на передачу данных между клиентом и сервером. запутали до невозможности. --------- и обратите внимание, я давно ничего не предлагаю для новейшего продукта, который даже не называется Аксаптой Последний раз редактировалось mazzy; 11.06.2021 в 19:20. |
|
|
За это сообщение автора поблагодарили: sukhanchik (5). |
12.06.2021, 11:58 | #11 |
Banned
|
Позволю себе один комментарий: 2021-2012 = 9.
С другой стороны, это не предел. Сейчас сносим систему в Бразилии, "возраст" которой превосходит мой биологический. То есть лет 30 еще есть у AX 2012 Последний раз редактировалось EVGL; 12.06.2021 в 12:01. |
|
|
За это сообщение автора поблагодарили: trud (1). |
12.06.2021, 16:01 | #12 |
Участник
|
|
|
12.06.2021, 16:18 | #13 |
Участник
|
и ты, trud?!
ты тоже путаешь энумераторы с коллекциями?! |
|
14.06.2021, 07:23 | #14 |
Участник
|
И я
Но как бы не стоит забывать, что в языке же есть встроенная конструкция while select, и довольно странно ее не использовать. Я так понимаю в текущих тренингах по X++ Микрософт не включает работу со временными таблицами в список тем, и в последних версиях можно наблюдать как их разработчики пытаются использовать List и ListEnumerator и подобные классы, думаю изрядно чертыхаясь при этом(я согласен что классы эти максимально неудобны). Но по идее временная таблица даст тебе максимальную гибкость и простоту в таких запросах(есть также мнение что производительность не максимальна, но это совсем пограничные случаи) Последний раз редактировалось trud; 14.06.2021 в 07:33. |
|
14.06.2021, 14:32 | #15 |
Участник
|
Жаль, очень жаль...
Цитата:
вот энумератор: https://github.com/mazzy-ax/SysEnume...tor_Record.xpp обрати внимание на метод next, в котором используется оператор next. из моего неопубликованного: энумерировать можно что угодно. даже не коллекцию. если правильно приготовить энумератор Цитата:
Сообщение от trud
Я так понимаю в текущих тренингах по X++ Микрософт не включает работу со временными таблицами в список тем, и в последних версиях можно наблюдать как их разработчики пытаются использовать List и ListEnumerator и подобные классы, думаю изрядно чертыхаясь при этом(я согласен что классы эти максимально неудобны). Но по идее временная таблица даст тебе максимальную гибкость и простоту в таких запросах(есть также мнение что производительность не максимальна, но это совсем пограничные случаи)
майкрософт не разобрался со своими же наследуемыми таблицами майкрософт не разобрался со своим же timevalidation в таблицах майкрософт не разобрался со своими же dataEntity мало ли с чем не разобрался майкрософт... согласен, что просто перекладывать while select в list - верх маразма. с другой стороны: временная таблица не заменяет и не отменяет энумераторы. временная таблица - коллекция, а энумераторы - это энумераторы временные таблицы и энумераторы замечательно работают вместе. ------------ думается мне, что ты сильно сужаешь тему стандартного энумератора. и уж точно уводишь в сторону от изначальной темы: Как стандартный ListEnumerator получает ссылку на список? |
|
15.06.2021, 19:25 | #16 |
Участник
|
Ой... когда-то давно я делал замеры производительности в AX2012:
К письму прикладываю XPO и Excel с результатами замеров. По вертикали время выполнения, по горизонтали - кол-во записей. Вобщем самый быстрий на операции Поиска и удаления - Array. Второе и Третье место - Map & Set С приемлемым результатом выступил Container. А вот Table in Memory - оказались самые тормознутые. List тоже там затисался, но там что-то было реализовано в виде цикла - потому и такой результат. |
|
|
За это сообщение автора поблагодарили: AlGol (4), EVGL (5), Lemming (5), Stitch_MS (5), Dynamics365Eng (1). |