2011-06-10 84 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的跟踪内容更改)。