Yar*_*tov 7 wolfram-mathematica
偶尔我遇到以下情况 - 一个程序使用全局函数f[x]进行一些计算,同时另一个程序f=5将所有后续调用f[x]转换为5[x]
我知道本地化变量,但我更喜欢在开发早期使用全局变量.
我想不出将OwnValues和DownValues混合的正当理由.当上述情况发生时,有没有办法实施警告信息?
除了以下提示之外,还可以在Cell Options/Evaluation Options/CellContext下的OptionsInspector中找到默认上下文
Mic*_*lat 11
您可以使用Protect[f]以避免进一步分配(任何类型)并Unprotect[f]再次允许它们.
你也可以用up-values做一些简单的hackery,以防止Set[f, ...]实际放置自己的值f但仍然允许分配down-values而不必使用Protect/ Unprotect:
In[76]:= ClearAll[f]
In[77]:= f /: Set[f, x_] := x
In[78]:= f = 7
Out[78]= 7
In[79]:= f
Out[79]= f
In[80]:= f[x_] := x + 1
In[81]:= f[1]
Out[81]= 2
Run Code Online (Sandbox Code Playgroud)
以上内容透明地阻止了Seton 的使用f.发出实际消息也很简单:
In[93]:= f::noov = "Blocked attempt to assign `1` as an OwnValue of f";
In[94]:= f /: Set[f, x_] := (Message[f::noov, x]; x)
In[95]:= f = 7
During evaluation of In[95]:= f::noov: Blocked attempt to assign 7 as
an OwnValue of f
Out[95]= 7
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |