2011-06-10 88 views

回答

6

是的,Manipulate將重新評估當bc變化,也如果test變化 - 和test被重新分配,每次的這些值變化的任何一個。因此,無盡的重新評估循環。

爲避免評估循環,競態條件和其他令人驚訝的行爲,通常應避免在結構的顯示錶達式中使用類似ManipulateDynamic的副作用。在當前情況下,我建議在test取消對b隱含的依賴和吊裝Manipulate之外它的定義:

test[b_, c_] := 2*b; Manipulate[test[b, c], {b, 0, 1}, {c, 0, 1}] 

在實際應用中,可能有這樣一個簡單的重構的障礙 - 但關鍵是要從動態表達中刪除:=

7

要解決最小的變化的問題,請

Manipulate[ 
test[a_] := 2*b; 
test[c], {b, 0, 1}, {c, 0, 1}, 
TrackedSymbols \[Rule] {b, c}] 

代替(即,添加TrackedSymbols告訴Mathematica的跟蹤內容更改)。