首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从调色板操作获取包时出现阴影问题

从调色板操作获取包时出现阴影问题
EN

Stack Overflow用户
提问于 2011-08-11 11:31:00
回答 2查看 213关注 0票数 6

我的第一个简单调色板应该是:

将我的包路径附加到$Path

ActionMenu["test",{"The Simple Packages Path":> AppendTo[$Path, ToFileName[{NotebookDirectory[], "02 Simple Packages"}]]}]

  • 收到我的包裹

ActionMenu["Load Packages", {"Get my package":> Get["myPackage`"]}]

在所选输入单元格(或新输入单元格)上放置

  • 位置,该输入表达式包含不同的位置持有者。

OpenerView[{"my Package", Button["construct", Paste[StandardForm@Defer@construct[Placeholder["description"],Placeholder["another description"]]]]}]

问题是,当我单击“获取我的包”操作菜单项时,我一直会收到“影子”消息。我肯定我不是故意加倍装货的。当我单击"construct“时,它会编写Global`construct["description","another description"]。但是我确信在获得包之前我并没有定义它(我在测试中杀死了内核)。

你知道怎么回事吗?

(我在包上使用Get,而不是Needs,以确保包上下文的干净启动)

另外:您知道做Paste[StandardForm@Defer...的一种更简单的方法吗?它既确保不对正在粘贴的表达式进行计算,也确保它进入输入单元格,即使没有选择单元格?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-11 14:50:23

好的,您的问题似乎是由于解析和接口创建之间的相互作用。在这种情况下,您想要的是延迟解析接口中的包符号--构造代码(在按钮操作函数中使用的包符号),从界面创建时间到“按下按钮”时间(假设到那时,包已经加载)。有一种方法可以做到:

代码语言:javascript
复制
Column[{ActionMenu["Load Packages",
   {"Get my package" :> Get["ANOVA`"]}],
   OpenerView[{"ANOVA", Button["construct",
       With[{sym = Symbol["ANOVA"]},
         Paste[StandardForm@Defer@sym[Placeholder["DATA"]]]]]}]}]

我们在这里所做的是使用With将符号注入按钮函数的代码中。但是,在解析接口代码时,我们阻止创建具有此名称的Global符号--否则会发生这种情况,这就是导致您的问题的原因。

编辑

如果您确实知道您只使用来自包的符号(函数),而不是来自Global'上下文的符号(函数),那么这里有一个版本将被“保护”不受此问题的影响:如果生成的符号的上下文是Global' -因此在加载包之前按下按钮只会导致一条警告消息(我使用符号package将消息附加到-应该被您的接口的任何名称替换--生成函数):

代码语言:javascript
复制
package::noload = "Please load the package containing symbol `1`";
Column[{ActionMenu["Load Packages",
  {"Get my package" :> Get["ANOVA`"]}],
   OpenerView[{"ANOVA", Button["construct",
      With[{sym = Symbol["ANOVA"]},
        If[Context[sym] === "Global`",
          Message[package::noload, Style[ToString[sym], Red]];
          Remove[sym];,
          (* else *)
          Paste[StandardForm@Defer@sym[Placeholder["DATA"]]]]]]}]}]
票数 6
EN

Stack Overflow用户

发布于 2011-08-11 13:01:21

嗯,我没有你的包,所以为了测试,我改变了动作菜单,得到了ANOVA软件包:

代码语言:javascript
复制
ActionMenu["Load Packages", {"Get my package" :> Get["ANOVA`"]}]

ANOVA[{{1, 1}, {1, 2}, {2, 4}, {2, 3}}]现在可以正常工作了。没有关于阴影的抱怨。这表明,你的阴影问题的原因在其他地方。不过,我注意到,ANOVA这个词仍然是蓝色的。这将与您报告的here问题有关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7025084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档