AppendTo[$Path, ToFil-6ren">
gpt4 book ai didi

wolfram-mathematica - 从 Palette 操作获取包时出现阴影问题

转载 作者:行者123 更新时间:2023-12-04 00:14:33 29 4
gpt4 key购买 nike

我简单的第一个调色板是假设:

  • 将我的包路径附加到 $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... 的更简单的方法吗?这确保不评估被粘贴的表达式并且它进入输入单元格,即使没有选择单元格?

    最佳答案

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

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

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

    编辑

    如果您确定您只使用包中的符号(函数),而不是 Global' 中的符号(函数)上下文,这里有一个版本将受到这个问题的“保护”:它将 Remove如果其上下文是 Global' 则生成的符号- 因此在加载包之前按下按钮只会导致警告消息(我使用符号 package 将消息附加到 - 应替换为您的界面名称 - 制作函数):
    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"]]]]]]}]}]

    关于wolfram-mathematica - 从 Palette 操作获取包时出现阴影问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025084/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com