In PHP e Python si può iterare sulle variabili locali e, se c'è una sola scelta in cui il valore corrisponde, si potrebbe dire che si conosce il nome della variabile, ma questo non sempre funziona. Il codice macchina non ha nomi di variabili. La C si compila all'assemblaggio e non ha alcuna capacità di riflessione nativa, quindi non riconoscerebbe il suo nome. (Modifica: per risposta di Anton il pre-processore può conoscere il nome della variabile).
Esistono linguaggi di programmazione in cui una variabile potrebbe conoscere il suo nome?
Diventa complicato se fai qualcosa come b = a
e b
non diventa una copia di a
ma un riferimento allo stesso posto.
EDIT: Perché nel mondo vorresti questo? Posso pensare ad un esempio: controllo degli errori che può sopravvivere al refactoring automatico. Considera questo snippet in C #:
private void CheckEnumStr(string paramName, string paramValue)
{
if (paramName != "pony" && paramName != "horse")
{
string exceptionMessage = String.Format(
"Unexpected value '{0}' of the parameter named '{1}'.",
paramValue,
paramName);
throw new ArgumentException(exceptionMessage);
}
}
...
CheckEnumStr("a", a); // Var 'a' does not know its name - this will not survive naive auto-refactoring
Ci sono altre librerie fornite da Microsoft e altre che consentono di verificare la presenza di errori (mi dispiace che i nomi mi siano sfuggiti). Ho visto una libreria che con l'aiuto di chiusure / lambda può eseguire un controllo degli errori che può sopravvivere al refactoring, ma non si sente idiomatico. Questa sarebbe una delle ragioni per cui potrei desiderare un linguaggio in cui una variabile conosce il suo nome.