OberonCore
https://forum.oberoncore.ru/

Как работает TextControllers, TextModels, TextMappers
https://forum.oberoncore.ru/viewtopic.php?f=23&t=2498
Страница 1 из 1

Автор:  hothing [ Вторник, 30 Март, 2010 10:14 ]
Заголовок сообщения:  Как работает TextControllers, TextModels, TextMappers

Доброго дня.

Несколько вопросов по теме. Пока больше всего интересует следующий:

Не могу понять почему после выполнения кода размер текста в модели равен 0.

Код:
c := TextControllers.Focus();
   IF c # NIL THEN
      c.GetSelection(sb,se);
      buf := TextModels.CloneOf(c.text);
      Log.Int(buf.Length());Log.Ln; (* buf.Length() == 0*)
        ...
        END


В фокусе находится окно с программой.

Автор:  Иван Горячев [ Вторник, 30 Март, 2010 11:02 ]
Заголовок сообщения:  Re: Как работает TextControllers, TextModels, TextMappers

Из-за неудачного названия процедуры. Согласно документации:
Цитата:
PROCEDURE CloneOf (source: Model): Model
This procedure should be used to obtain a new text from the same type as another existing text.

То бишь она делает объект такого же типа, но отнюдь не с тем же содержимым. По хорошему эта процедура должна называться как-то типа NewWithSameType.

Автор:  hothing [ Вторник, 30 Март, 2010 11:31 ]
Заголовок сообщения:  Re: Как работает TextControllers, TextModels, TextMappers

Спасибо!

Автор:  Иван Кузьмицкий [ Воскресенье, 09 Декабрь, 2012 21:33 ]
Заголовок сообщения:  Re: Как работает TextControllers, TextModels, TextMappers

Вот эта вот TextModels.CloneOf, оказывается, делает клон с одной целью - разделить между клонами некую структуру SpillFile, содержащую ссылку на временный файл.

Получается, что каждой текст-модели соответствует свой временный файл на диске. Сперва мы тут подумали, что это работает только для текстов, загруженных из файла, но вот если приглядеться к процедуре TextModels.StdWriter.WriteChar, то можно увидеть, как там открывается этот самый спилл-файл.

Что-то жирновато получается, под каждый текст заводится свой файл. Тогда логична необходимость операции клонирования, не позволяющая плодиться временным файлам.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/