Я пишу компилятор упражнений, а lookup_helper (key, current) возвращает указатель на некоторый символ, если он найден в текущей области. цикл for() циклически перемещается по всем областям и ищет какой-либо символ, пока не найдет его и не вернет. в противном случае возвращается nullptr.Возврат, если значение функции равно нулю
Symbol * lookup()
{
//....
//....
//search all scopes
for (int i = Scopes.size(); i > 0; i--)
{
Scope current = Scopes[i - 1];
if (lookup_helper(key, current)) //not good design
return lookup_helper(key, current); //calling second time
}
return nullptr; //not found
}
Не этот код вызывает lookup_helper() дважды? один раз в if() и один раз в обратном? У меня есть решение этой проблемы, но я ищу более элегантное решение, которое вызывает lookup_helper только один раз (также я не хочу создавать некоторую переменную для хранения возвращаемого значения). Возможно, то, что я прошу, невозможно, потому что мне нужно будет перейти к выполнению кода, чтобы определить, возвращает ли lookup_helper значение nullptr или нет.
Что бы себе элегантна: (не работает, как это)
for (int i = Scopes.size(); i > 0; i--)
{
Scope current = Scopes[i];
return (ifnotnull) lookup_helper(key, current);
}
Почему бы не использовать локальную переменную? – Jarod42
В OP я говорю, что это не то, что я хотел бы сделать. Я ищу особенность языка (что-то вроде лямбды или чего-то еще), что позволяет ему вызывать функцию только один раз – user3465668
Каким образом последний пример изящный? Все еще вызов 'lookup_helper' дважды, плюс проверка (попытка) дважды сейчас? – LogicStuff