【发布时间】:2011-05-07 05:17:37
【问题描述】:
Definition“知道”符号值的定义方式:使用Set 或SetDelayed。但是怎么做?据我了解,在分配符号值后,评估器的分配方式没有任何区别:使用Set 或SetDelayed。它可以通过函数OwnValues 来说明,它总是返回带有Head RuleDelayed 的定义。 Definiton 是如何获取这些信息的?
In[1]:= a=5;b:=5;
Definition[a]
Definition[b]
OwnValues[a]
Out[2]= a=5
Out[3]= b:=5
Out[4]= {HoldPattern[a]:>5}
【问题讨论】:
-
Alexey 的另一个好问题。
-
有一个非常重要的用例,它对分配中使用的内容产生了真正的影响 -
Set或SetDelayed:Part分配。面对tst = {1, 2, 3}; tst[[2]] = 5; tst(正常工作)和tst1 := {1, 2, 3}; tst1[[2]] = 5(给出赋值错误,tst1没有立即值)。当然,正如您观察到的那样,tst和tst1的OwnValues看起来相同。鉴于您对内存消耗的观察,我猜延迟定义可能会使用一些中间内部变量,而直接定义则直接指向存储数据的内存。