我正在尝试将值附加到列表中,我将其移交给函数,例如:
p = {{"Blaaaa"}};
AppendTo[p, {"Lalala"}];
dran [h_] := AppendTo[h, {"Hahaha"}]
dran[p]
但我收到以下错误:
AppendTo:{{Blaaaa},{Lalala}}不是带值的变量,因此无法更改其值。
我不明白。我的意思是我没有改变任何价值观。任何帮助将不胜感激。
答案 0 :(得分:2)
错误的原因是在mathematica默认情况下,函数args通过副本有效传递,不能修改。 AppendTo
(与所有以To
结尾的mathematica内在函数)实际上修改了它的参数。设置HoldFirst
属性可以修改参数。
p = {{"Blaaaa"}};
SetAttributes[dran, HoldFirst]
dran[h_] := AppendTo[h, {"Hahaha"}]
dran[p]
{{" Blaaaa"},{" Hahaha"}}
请注意p
本身已更改。
p
{{" Blaaaa"},{" Hahaha"}}
请注意,如果您尝试将此函数与文字参数一起使用,则会回到同一问题:
dran[{{"xyz"}}]
{{" xyz"}}不是带值的变量,因此无法更改其值
使用普通Append
可能更好,它可以在没有HoldFirst
的情况下工作,并保持输入参数不变。
p = {{"Blaaaa"}};
dran[h_] := Append[h, {"Hahaha"}]
dran[p]
p
{{" Blaaaa"},{" Hahaha"}}
{{" Blaaaa"}}