Re: Кеширование переменной
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.12.11 19:13
Оценка:
Здравствуйте, SSS135, Вы писали:

SSS>Можно ли написать макрос для кеширования значения функции в переменной и пересчет этого значения при изменении переменных, от которых зависит значение функции?


Такой макрос уже есть. Называется он Memoize. Применяется к методам.

Единственная загвоздка — пересчет значений. Это в нем не сделано. Но это не трудно в него добавить. Можно добавить еще одну опцию задающую некий код при выполнении которого кэш будет сбрасываться. Тогда твой код будет выглядеть так:
using System;
using System.Console;

class Test
{
  public Val: int
  {
    [Memoize(ResetWhenMemberChanged(dep1, dep2))]
    get 
    { 
      valCompute();
    }
  }
  
  private valCompute(): int
  {
    dep1 + dep2
  }

  public mutable dep1: int = 0;
  public mutable dep2: int = 0;
}

// пример использования
module Program
{
  Main() : void
  {
    def test = Test();
    WriteLine(test.Val);
    test.dep1 = 5;
    WriteLine(test.Val);
    test.dep2 = 5;
    WriteLine(test.Val);
  }
}
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.