将符号暴露给 $ContextPath

2024-03-26

有多种Internal`有用的上下文函数,例如InheritedBlock https://stackoverflow.com/questions/4198961/what-is-in-your-mathematica-tool-bag/5686710#5686710, Bag and StuffBag https://stackoverflow.com/questions/6691491/implementing-a-quadtree-in-mathematica/6795762#6795762等等,以及许多有用的Developer`功能。

我希望公开这些符号的选择,以便可以在没有上下文名称的情况下清楚地寻址它们,但我不想通过添加来公开所有符号Internal` and Developer` to $ContextPath.

我可以使用代理符号,例如Bag = Internal`Bag但这既不干净也不完全正确,因为它是一个参考,例如属性不被继承。

有没有一种方法可以选择性地公开我想要的符号,而不需要诉诸上面的麻烦?


在我看来,这是一个非常深刻和有效的问题,从投票数来看,我并不是唯一一个这么想的人。如果我们在语言级别上完全支持此功能,这将提供一种全新的方式来操作范围和封装,并且 IMO 通常会允许更清晰的代码和更好的信息隐藏。这类似于from module-name import name1,name2,...在Python中。

也许和我们许多人一样,我尝试过多种方法,但所有这些方法似乎都很脆弱且不完整。最坏的情况是对于包,对此我没有很好的解决方案。对于前端的交互工作,这里是一个可能可以接受的。首先定义一个通用宏来进行文字替换:

ClearAll[withImported];
SetAttributes[withImported, HoldAll];
withImported[importingRules : {(_Symbol ->  _String) ..}, code_] :=
  With @@ Join[
     Hold[importingRules] /.
      (name_Symbol -> context_String) :>
          With[{eval =
               Block[{$ContextPath = Append[$ContextPath, context]},
                 ToExpression[context <> ToString[Unevaluated@name]]
               ]},
             Set[name, eval] /; True],
     Hold[code]];

withImported[importingRules : {({__Symbol} -> _String) ..}, code_] :=  
    Reverse[Hold @@ Flatten[Unevaluated[importingRules] /.
        ({syms__Symbol} -> s_String) :> Thread[s :> {syms}]], {2}] /. 
        RuleDelayed -> Rule /.
        Hold[expandedRules : ((_Symbol ->  _String) ..)] :> 
             withImported[{expandedRules}, code];

然后,创建一个包含您最喜欢的快捷方式的函数,例如:

shortcutF = 
   Function[code,
     withImported[
       {
         {PackedArrayQ, ToPackedArray, FromPackedArray} -> "Developer`",
         {InheritedBlock, WithLocalSettings} -> "Internal`"
       },
       code
     ],
     HoldAll];

您现在可以将代码包装在shortcutF并开始使用简称。到目前为止,这也适用于包,但是您必须将所有代码(或至少那些包含快捷方式的代码)包装在shortcutF,这不是很方便。作为进一步方便的步骤,您可以将上述函数分配给$Pre:

$Pre = shortcutF;

以下是一些使用示例:

In[31]:= 
WithLocalSettings[Null,Abort[],Print["Cleanup"]]

During evaluation of In[31]:= Cleanup
Out[31]= $Aborted[]

In[32]:= PackedArrayQ[Range[10]]
Out[32]= True

In[33]:= PackedArrayQ@FromPackedArray[Range[10]]
Out[33]= False

Since With在幕后使用,真正发生的是在执行代码之前,您的快捷符号被完全限定的符号名称替换。

这是我所能得到的,但这个功能似乎特别需要该语言的本地支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将符号暴露给 $ContextPath 的相关文章

  • 将“GatherBy”的转换应用于不同的列表

    I have listA and listB大小相同 我正在做GatherBy on listA 这会重新排列该列表 将相同的重排应用于listB 例如 listA 1 2 3 listB a b c listA1 GatherBy 1 2
  • 将声音导出为 WAV 文件

    我从来没有在 Mma 中过多地使用声音 I have t Sound List Violin SoundNote 6 我怎样才能导出t作为 WAV 文件 当我尝试显而易见的事情时 Export c test wav t I get 在这个旧
  • gcc 在链接时忽略符号名称的大小写

    我正在开发的一个软件使用全小写符号名称将 NETLIB BLAS LAPACK 嵌入到其源代码中 但现在将应用程序移植到 Windows 时我发现 Intel MKL 和该平台的其他几个 BLAS LAPACK 实现使用全大写符号名称 有没
  • Coq :> 符号

    这可能是非常微不足道的 但我找不到任何关于 gt 符号在 Coq 中含义的信息 有什么区别 U 类型 和 W gt 类型 这取决于符号出现的位置 例如 如果它位于记录声明内 它会指示 Coq 添加相应的记录投影作为强制 具体来说 假设我们有
  • Mathematica 中的语法着色

    用户定义的函数符号如f in f x 2 x 或变量符号 例如lotto in lotto Table 2 10 自动着色 在 M8 上的语法着色中 没有为此提供选项 仅限未分配值的局部变量或全局符号 这并不完全是您所要求的 但可能对您有用
  • 对函数体评估感到困惑

    我对以下行为感到困惑Function In 1 InlineCellInMessage Function expr DisplayForm Cell BoxData MakeBoxes expr StandardForm Input Hol
  • 用于出版质量图的 Python Pylab pcolor 选项

    我正在尝试使用 DFT 离散傅立叶变换 图pcolor在Python中 我之前一直使用 Mathematica 8 0 来执行此操作 但我发现 Mathematica 8 0 中的颜色条与我尝试表示的数据具有不良的一对一相关性 例如 这是我
  • 有没有办法自动将Matlab 中的结果或数据导入到Mathematica 中?

    有没有办法将结果或数据 例如矩阵 从Matlab导入到Mathematica自动地 或者有什么方法可以先运行Matlab程序 然后运行Mathematica程序自动地 感谢您提供任何有用的答案 至少有三种方法可以解决这个问题 通过 Java
  • 在 MathLink 函数中检查中止?

    我刚刚发现这样的MathLink功能为LinkWrite and LinkRead有类似其内部的东西CheckAbort吸收任何中止 并且不会进一步传播它们 这可以很容易地显示为LinkRead link LinkLaunch First
  • 将符号暴露给 $ContextPath

    有多种Internal 有用的上下文函数 例如InheritedBlock https stackoverflow com questions 4198961 what is in your mathematica tool bag 568
  • 如何让 Mathematica 内核暂停以创建外部文件

    是否可以在计算期间暂停 Mathematica 内核 这是一个例子 Module Mathematica code Calls an external program with some argument Needs to wait for
  • 解决电力塔

    a 2 Power 10 6 10 9 3 Power 4 9 7 5 TwoTower n Nest 2 1 n 最小的是什么n这样TwoTower n gt a This question http www quora com How
  • 如何在数学中为给定旋转轴的 3D 绘图制作动画

    如果给定标准化旋转轴 例如 1 Sqrt 3 1 Sqrt 3 1 Sqrt 3 和 3d 图 例如 z x y Exp Sqrt x 2 y 2 Power 4 3 1 Power 4 3 1 Sqrt 1 2 Sqrt x 2 y 2
  • NIntegrate - 为什么在这种情况下 Mathematica 8 的速度要慢得多?

    我有一个 Mathematica 代码 我必须在数值上评估数千个与此类似的积分 NIntegrate Pi Cos Pi 2 x y 1 y 1 y Sin 2 Pi x 1 y Sin Pi 2 x y 1 y E x 1 y x 0 1
  • 可以在 Mathematica 中扩展 PDF、CDF、FindDistributionParameters 等功能吗?

    我开始使用新的 Mathematica 统计和数据分析功能进行越来越多的工作 我周二参加了 Mathematica 统计与数据分析 在线研讨会 非常棒的演讲 我强烈推荐 但我遇到了一些问题 我希望这个论坛上的人可以花点时间考虑一下 我创建了
  • 将模块定义为 Manipulate 表达式的一部分与在初始化部分中定义有任何性能问题吗?

    我想问是否有人知道任何问题 性能或其他 如果要定义 放置 Manipulate 表达式使用的模块 就在 Manipulate 表达式本身内部 而不是在初始化部分 通常是在哪里完成的 两种方法都有效 但是当涉及到从模块直接访问 Manipul
  • 如何使用符号来标识 ruby​​ 方法中的参数

    我正在学习 Rails 并回到 ruby 来了解 Rails 中的方法 以及 ruby 的实际工作原理 当我看到如下方法调用时 validates first name presence gt true 我有点迷惑不解了 如何在 ruby
  • perf 找不到外部模块符号

    跑步时perf它找到了我的程序的内核符号和符号 但没有找到外部模块符号 我已经编写了一个内核模块 我使用它加载insmod我怎么知道perf也找到它的符号 我正在运行 2 6 37 6 内核 无法升级 我的perf尚不支持矮人选项 但我认为
  • 根据 Mathematica 中的另一个列表值拆分列表

    在 Mathematica 中我有一个点坐标列表 size 50 points Table RandomInteger 0 size RandomInteger 0 size i 1 n 以及这些点所属的聚类索引列表 clusterIndi
  • 如何默认显示动画控件

    在mathematica中这个简单的控制对象中 如下所示 Control x 0 1 我们必须将鼠标指针移至对象的右上角才能获得名为 显示动画控件 的提示 然后单击它以查看播放 前进等动画控件 有没有办法通过设置一些选项来默认情况下打开所有

随机推荐

  • Windows XP 上的 Java 最大内存

    我一直能够为在 32 位 Windows XP Java 1 4 1 5 和 1 6 上运行的 Java SE 分配 1400 MB 的空间 java Xmx1400m 今天 我在使用 Java 1 5 16 和 1 6 0 07 的新 W
  • Javascript字符串nodejs流实现

    我需要一个将数据发送到字符串的nodejs 流 http nodejs org api stream html 实现 你认识什么人吗 直接地说 我正在尝试通过管道传输请求响应 如下所示 请求 http google com doodle p
  • 检查字符串变量是否具有整数值

    我正在开发一个项目 允许孩子们向圣诞老人发送消息 不幸的是 如果他们在 AGE 字段中输入字符串而不是整数 则程序会崩溃并返回 Conversion from string exampleString to type Double is n
  • 使用 RSA AES 提供程序生成自签名 1024 位 X509Certificate2 时出现问题

    我正在尝试使用以下命令生成 X509Certificate2 对象Microsoft AES 加密提供程序 https msdn microsoft com en us library windows desktop aa386979 28
  • .External2(C_dataviewer, x, title) 中的错误:无法启动数据查看器

    在 R 中 每次点击时都会出现以下错误View or data frame我不明白为什么 事情发生得很突然 gt View Fhat all Error in External2 C dataviewer x title unable to
  • 如何冻结设备特定的已保存模型?

    我需要冻结保存的模型以供服务 但某些保存的模型是特定于设备的 如何解决此问题 with tf Session config tf ConfigProto allow soft placement True as sess sess run
  • 性能分析 asp.net,什么是 ProcessRequestNotificationHelper?

    我正在对每秒 20 个用户的负载下的 ASP NET Web 应用程序进行性能分析 20 个用户基本上使应用程序瘫痪 并且无法加载任何内容 我正在使用 RedGate 性能分析器 但我不知道如何使用它 12 的时间花在我的代码上 我可以深入
  • 该程序无法启动,因为您的计算机缺少 MSVCR110.dll

    我正在尝试将 apache 服务器 2 4 安装到我的 Windows 计算机上 到目前为止我遇到了这个 常见 问题 但我无法解决它 标题中的错误消息继续出现 但我已经 成功 下载了缺少的必需项目的 32 位和 64 位版本http www
  • kubectl 从 gitlab 未经授权拉取镜像:HTTP Basic:访问被拒绝

    我正在尝试配置 gitlab ci 以将应用程序部署到谷歌计算引擎 我已成功将映像推送到 gitlab 存储库 但在应用 kubernetes 部署配置后 我在 kubectl 描述 pod 中看到以下错误 Failed to pull i
  • Java-应用程序背后的屏幕捕获

    有没有一种方法可以捕获屏幕但不显示应用程序本身 我知道如何最小化或使框架不可见 但这必须非常快地完成 因为它会在每秒发生很多次 至少每秒一次 我希望它看起来像 Windows Vista 7 中的放大镜 该应用程序可以看到自己的背后 Cal
  • 使用 iPhone SDK 以编程方式拨打电话号码并传递 DTMF

    如何通过 iPhone SDK 以编程方式执行以下操作 通过 iPhone SDK 以编程方式拨打电话号码 绕过拨号 取消iPhone 弹出的提示 拨打号码后发送额外的 DTMF 就像将暂停编程到普通电话中一样 我知道你可以做一个tel 呼
  • 在 HTML5 Web SQL 数据库中对日期时间进行排序

    我找不到解决我的问题的方法 我有一个 HTML5 Web SQL 数据库 其中有一个如下表 db transaction function tx tx executeSql CREATE TABLE IF NOT EXISTS todo t
  • 可拖动的平面列表不渲染任何内容

    我正在尝试为draggable flatlist编写一个简单的代码 相同的代码对于 FlatList 运行得非常好 在下面的代码中 如果我用 DraggableFlatList 替换 FlatList 尽管从渲染组件 TaskListTil
  • 为什么要在方法参数列表中添加void

    我见过具有以下签名的方法 void foo void 他们不接受任何争论 但我想知道这样做是否有用 您有理由这样做吗 这是旧版本 C 的遗留物 其中foo 意思是 具有未知数量参数的函数 并且foo void 意思是 零参数的函数 在 C
  • Android 中使用 Kotlin 的文件复制 Flutter 插件

    尝试创建一个 Flutter 插件 将资产文件复制到本机应用程序文档文件夹 对于 iOS 我通过以下代码实现了这一点 见下文 但是 由于我对 Android 架构了解不多 所以我想知道我的 Android MethodChannel 代码应
  • KeyboardView 在 Android 中已被弃用

    KeyboardView已被 Android 团队在 API 级别 29 中正式弃用 我无法找到替代方法 请告诉我是否还有其他选择 谷歌建议的唯一解决方案是复制键盘视图 java https android googlesource com
  • 以角度方式检测窗口焦点?

    有没有一种好的角度方法来检测窗口焦点 我正在使用 html5 通知 并且我只想在窗口失去焦点时触发 Thanks 有一个内置的角度指令ngFocus here https docs angularjs org api ng directiv
  • 取消引用已删除的指针是否总是会导致崩溃? [复制]

    这个问题在这里已经有答案了 我这里有一个非常简单的 C 代码示例 char s new char 100 strcpy s HELLO delete s int n strlen s 如果我通过按 Visual C 2008 运行此代码F5
  • 如何从 UIColor 获取 RGB 值?

    我正在使用以下代码创建一个颜色对象 curView backgroundColor UIColor alloc initWithHue 229 saturation 40 brightness 75 alpha 1 如何从创建的颜色对象中检
  • 将符号暴露给 $ContextPath

    有多种Internal 有用的上下文函数 例如InheritedBlock https stackoverflow com questions 4198961 what is in your mathematica tool bag 568