模块警告:在"显示"中,在超出范围之前可能不会对其进行评估



我曾尝试制作自己的操纵模块,根据1个参数在2D空间中绘制数值轨迹。

问题是我对Show中的每个变量的标题都有这个警告。

我知道它与一些动态功能有关,但我仍然不知道如何摆脱它。

另外,如果我能在这个模块的输出中去掉局部变量名(k$8245),那就太好了。

MyManipulatePlot2D[list_, opts : OptionsPattern[]] := 
Module[{mv, pr, rt, constPlots, k},
{rt, mv, pr} = Dimensions[list];
constPlots = Table[ListPlot[list[[i,;;, 1 ;; 2]], opts], {i, rt}];
Manipulate[
Show[constPlots[[k]]], {k, 1, rt, 1}]
]

注:我不想把ManipulateModule中去掉,因为在我的代码中这个函数要复杂得多它实际上是根据两个参数画出轨迹的。如果有人感兴趣的话就在这里

MyManipulatePlot2D[list_, opts : OptionsPattern[]] := 
Module[{rt, mv1, pr, constPlots, k1, mv2, i, k2, pointsPlot},
{rt, mv1, mv2, pr} = Dimensions[list];
constPlots = 
Table[ListPlot[
ArrayReshape[list[[;; , i, ;; , ;;]], {rt*mv2, pr}][[;; , 
1 ;; 2]], PlotStyle -> ColorData[97, "ColorList"][[2]], 
opts], {i, mv1}];
pointsPlot = list[[;; , ;; , ;; , 1 ;; 2]];
pointsPlot = ArrayReshape[pointsPlot, {rt, mv1, mv2, 1, 2}];
Manipulate[
Show[{constPlots[[k1]], 
ListPlot[pointsPlot[[;; , k1, k2]], 
PlotLegends -> 
Placed[ToString[{list[[1, k1, k2, 3]], list[[1, k1, k2, 4]]}], 
Top]]}], {k1, 1, mv1, 1}, {k2, 1, mv2, 1}]
]

我试着用Evaluate函数进行实验,但没有成功。

您可以通过使用Block而不是Module来修复k$8245问题,或者您可以使用标签"k",如下所示。k$8245是模块的局部变量名,所以它按照预期显示,即使不是您想要的。未发现其他问题。

MyManipulatePlot2D[list_, opts : OptionsPattern[]] := 
Module[{mv, pr, rt, constPlots, k}, {rt, mv, pr} = Dimensions[list];
constPlots = Table[ListPlot[list[[i, ;; , 1 ;; 2]], opts], {i, rt}];
Manipulate[Show[constPlots[[k]]], {{k, 1, "k"}, 1, rt, 1}]]

第二个操作只是灾难性的错误。

最新更新