Я имею recently learned как использовать лямбда для ленивых вычислений, что позволяет мне сделать это:Ленивый оценки в сеттер
MoveTo moveToTargetCreature =
new MoveTo(() => parent.Context.TargetCreature);
...
public class MoveTo
{
Func<Creature> Target { get; set; }
public MoveTo(Func<Creature> Target)
{
this.Target = Target;
}
public Act(Creature parent)
{
parent.MoveTowards(Target().Position);
}
}
... и вызов подпрограммы Действие() позже, чтобы заставить существо перемещаться к любой ближайшей цели.
Это прекрасно работает, когда все, что я пытаюсь сделать, это получить переменную (просто вызвать Target()), но что, если я хочу ее установить? Например:
SetVariable setTargetCreatureToClosestCreature =
new SetVariable(parent.Context.TargetCreature,() => parent.Context.ClosestCreature);
...
public class SetVariable
{
Creature VariableToSet { get; set; }
Func<Creature> Target { get; set; }
public SetVariable(Creature VariableToSet, Func<Creature> Target)
{
this.VariableToSet = VariableToSet;
this.Target = Target;
}
public Act(Creature parent)
{
VariableToSet = Target();
//What I want: Set "parent.Context.TargetCreature" to Target()
//What it does: Sets the internal "VariableToSet" to Target(), but
//leaves "parent.Context.TargetCreature" as what it was when initialised.
}
}
И если я в качестве альтернативы использовать Func и синтаксис лямбда, он не будет компилироваться, так как вы не можете назначить для вызова метода.
Каким будет подходящий синтаксис для этого?
0 Я пытаюсь понять, что вы пытаетесь сделать здесь. Можете ли вы описать реальную проблему, которую вы пытаетесь решить здесь? – Enigmativity
Приношу свои извинения. Показанный код на самом деле является проблемой, которую я пытаюсь решить, но я добавил пояснение к комментарию в последнем блоке кода, который должен помочь. – Quasar
Нет, я не согласен. Показанный код не является проблемой, которую вы пытаетесь решить. Это ваше предлагаемое решение, которое, по вашему мнению, решит вашу настоящую проблему. Какова ваша реальная проблема? – Enigmativity