Я бы сделал это, создав подкласс для DYNAMICPROPS , который использует массив ячеек для внутреннего хранения данных.Таким образом, вы можете динамически добавлять дополнительные данные к объекту.
Вот основная идея проекта:
Данные хранятся в массиве ячеек.Каждое свойство получает свою собственную строку, причем первый столбец является именем свойства (для удобства), второй столбец - дескриптор функции для вычисления данных, третий столбец - данные, четвертый столбец - время, необходимое для генерации данных,пятый столбец - массив, скажем, длины 100, в котором хранятся метки времени, соответствующие моменту обращения к свойству последние 100 раз, а шестой столбец содержит переменный размер.
Существует универсальный метод get, который принимает в качестве входных данных номер строки, соответствующий свойству (см. Ниже).Метод get сначала проверяет, является ли столбец 3 пустым.Если нет, он возвращает значение и сохраняет метку времени.Если да, он выполняет вычисление, используя дескриптор из столбца 1 внутри оператора TIC / TOC , чтобы измерить, насколько дорогим является вычисление (которое хранится в col4, а отметка времени хранится в col5).Затем он проверяет, достаточно ли места для хранения результата.Если да, он хранит данные, в противном случае он проверяет размер, а также произведение количества обращений к данным и того, сколько времени потребуется для восстановления, чтобы решить, что отбраковывать.
Кроме того, существуетэто свойство 'add', которое добавляет строку в массив ячеек, создает динамическое свойство (используя addprops
) с тем же именем, что и дескриптор функции, и устанавливает для метода get значение myGetMethod(myPropertyIndex)
.Если вам нужно передать параметры в функцию, вы можете создать дополнительное свойство myDynamicPropertyName_parameters
с помощью метода set, который будет удалять ранее вычисленные данные при каждом изменении значения параметров.
Наконец, вы можете добавить несколько зависимых свойств, которые могут указать, сколько их свойств (количество строк в массиве ячеек), как они называются (первый столбец массива ячеек) и т. Д.