Skip to content

Выводить тип элемента пользовательских OneScript-коллекций (&Обходимое) #4138

Description

@nixel2007

Follow-up к #4033 / #4134.

В #4134 пользовательские OneScript-классы с аннотацией &Обходимое начали распознаваться как коллекции (supportsForEach=true), но тип элемента при обходе остаётся «любым» (как у Массив). То есть Для Каждого Элемент Из Коллекция Цикл даёт Элемент типа «произвольный», а не конкретный тип.

Главный вопрос: откуда брать тип элемента?

В исходниках OneScript тип элемента коллекции нигде явно не объявлен — движок при обходе отдаёт Произвольный. Нужно решить, какой источник истины использовать. Возможные варианты:

  1. @return функции ТекущийЭлемент() итератора. Цепочка: &Обходимое-класс → ПолучитьИтератор() возвращает итератор → итератор помечен &Итератор, у него ТекущийЭлемент() с типизированным @return. Минус: в collectionos ТекущийЭлемент() нетипизирован (Возврат ВнутреннийИтератор.Следующий()), так что для самой библиотеки это всё равно даст any.

  2. @return функции ПолучитьИтератор() (если её тип — конкретный класс-итератор с известным типом элемента).

  3. Отдельная аннотация/конвенция на классе-коллекции, явно объявляющая тип элемента (например, &ТипЭлемента("Число") или дженерик-параметр). Требует договорённости и доработки на стороне библиотек коллекций.

  4. Эвристика по @return методов Получить(Индекс) / Элемент(...) и т.п.

Вопросы к обсуждению

  • @sfaqer, как ты видишь источник типа элемента для collectionos и пользовательских коллекций в целом? Готов ли движок/библиотеки нести эту метаинформацию (типизированный ТекущийЭлемент() / отдельная аннотация / дженерик)?
  • Достаточно ли best-effort вывода (типизирован ТекущийЭлемент() → берём; иначе any), или нужна явная декларация?

Связано

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions