我正在編寫一個練習編譯器,並且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中,我說這不是我想要做的事情。我正在尋找一種語言功能(類似lambda或其他東西),只允許它調用一次功能 – user3465668
最後一個例子是優雅的嗎?仍然調用'lookup_helper'兩次,再加上檢查(試圖)兩次? – LogicStuff