Я думаю, что при удалении символа line
дальнейшие ссылки на временную переменную line$
отсутствуют, поэтому она удаляется автоматически.
In[1]:= HoldComplete[With[{line=a},Null]]
Names["`*"]
Attributes/@Names["`*"]
Out[1]= HoldComplete[With[{line=a},Null]]
Out[2]= {a,line,line$}
Out[3]= {{},{},{Temporary}}
In[4]:= Remove["line"]
In[5]:= Names["`*"]
Out[5]= {a}
Это было проверено в Mma v8. Так что может быть подсчет ссылок (или реализация локализации) немного изменился с v5?
Обратите внимание, что если вы сначала попытаетесь удалить временный символ, вы получите довольно информативное предупреждение:
In[6]:= HoldComplete[With[{line=a},Null]]
Names["`*"]
Attributes/@Names["`*"]
Remove/@Reverse@Names["`*"]
Out[6]= HoldComplete[With[{line=a},Null]]
Out[7]= {a,line,line$}
Out[8]= {{},{},{Temporary}}
During evaluation of In[6]:= Remove::relex: Cannot remove lexical symbol
line$ except automatically (when line is removed). >>
Out[9]= {Null,Null,Null}