这与这个问题有点关系
但是上面的问题没有回答我的问题,因为它讨论了完整的控制定义.(我也尝试过那里展示的一些技巧,但它们对我的问题不起作用).
我现在只询问部分控件的定义.(使用这种论坛格式也很难跟进一个老问题.因为使用微小的评论区域,很难提出更多的问题,并且更像是在询问空间较大的新问题时,可以粘贴代码和图片).
我所做的所有尝试都不起作用.我将从简单的例子开始解释这个问题.
假设有人想写
Clear["Global`*"];
Manipulate[Plot[f*g, {x, -1, 1}],
Grid[{
{Style["f(x)="],
PopupMenu[Dynamic[f], {x, x^2, x^3}, ImageSize -> Tiny]},{Style["g(x)="],
PopupMenu[Dynamic[g], {x, x^2, x^3}, ImageSize -> Tiny]}
}]
]
Run Code Online (Sandbox Code Playgroud)
您可以看到每个控件定义中都存在重复的代码重复.(像ImageSize,Spacings->和许多其他装饰设置之类的东西会反复重复每个控件.

如果我能写出类似的东西,那会是多么美好的事情
Manipulate[Plot[f*g, {x, -1, 1}],
Grid[{
{Style["f(x)="], PopupMenu[Dynamic[f], Evaluate@Sequence@v]},
{Style["g(x)="], PopupMenu[Dynamic[g], Evaluate@Sequence@v]}
}],
Initialization :>
(
v = {{x, x^2, x^3}, ImageSize -> Tiny}
)
]
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我在上面的那一行尝试了许多其他的东西,没有任何作用.喜欢
{Style["f(x)="], PopupMenu[Dynamic[f], v]},
Run Code Online (Sandbox Code Playgroud)
和
{Style["f(x)="], PopupMenu[Dynamic[f], Evaluate@v]}
Run Code Online (Sandbox Code Playgroud)
和
Manipulate[Plot[f*g, {x, -1, 1}],
{{v, {{x, x^2, x^3}, ImageSize -> Tiny}}, None},
Grid[{
{Style["f(x)="], PopupMenu[Dynamic[f], …Run Code Online (Sandbox Code Playgroud) Condition具有HoldAll在应用之前阻止评估其第一个参数的属性Condition.但由于某种原因,Condition即使测试给出了评估它的第一个参数False:
In[1]:= Condition[Print[x],False]
During evaluation of In[1]:= x
Out[1]= Null/;False
Run Code Online (Sandbox Code Playgroud)
为什么是这样?Condition如果测试给出的话,为了什么目的评估它的第一个参数False?在哪些情况下这种行为可能有用?
PS当它Condition被用作第二个参数时,它的行为会有所不同SetDelayed:
In[5]:= f:=Condition[Print[x],False]; f
Out[6]= f
Run Code Online (Sandbox Code Playgroud)
这是我对所有案例的预期.