Я пытаюсь построить оценщик выражений с помощью выражений Linq.Я пытаюсь сделать так, чтобы все аргументы функции вычислялись лениво, но не могли до них добраться.
Я пишу здесь в psuedo, но на самом деле это выражения linq.
Пример выражения:
Func1(Func2(10) + 1, Func3(10))
Обновление
Expression.Call(Func1,
Expression.Add(
Expression.Call(Func2, Expression.Constant(10)),
Expression.Constant(1))
Expression.Call(Func3, Expression.Constant(10))
)
Я хочу, чтобы аргументы Func1 оценивались во время вызова, то есть я хочу, чтобы аргументы оценивались лениво.Это возможно при переносе выражений аргумента в лямбда-выражение, но если я сделаю это, двоичное выражение Func2 (10) + 1 не будет выполнено, потому что нельзя добавить лямбда-выражение в константное выражение.
Фактический код функциибудет выглядеть так:
int Func1(Func<int> arg1, Func<int> arg2)
{
}
arg1 при запуске будет вычислять "Func2 (10) + 1"
arg2, когда запуск будет оценивать "Func3 (10)"
Так что здесь яМожно выбрать, хочу ли я переоценить аргумент или нет, чтобы получить ленивый эффект.
Возможно ли это сделать?