Mathematica:如何清除符号的缓存,即取消设置无模式的 DownValues

2024-01-04

我是一个糟糕的缓存器:有时,当没有人在看时,我会缓存结果而不包含完整的上下文,如下所示:

f[x_]:=f[x]=x+a;
a=2; f[1];
DownValues[f]

Out[2]= {HoldPattern[f[1]]:>3,HoldPattern[f[x_]]:>(f[x]=x+a)}

这会导致非常微妙的错误,更重要的是,当我更改上下文时需要清除缓存。清除缓存的一种方法是完全清除Clear符号并重复定义,但这并不是真正的解决方案。

我真正想要的是一种清除与符号关联的所有无模式 DownValues 的方法。
为了清楚起见,我将把我目前的解决方案作为答案,但如果在两个方面失败

  • 它仅清除带有全数字参数的 DownValues
  • 出于美观原因,我想避免使用Block获取 DownValues。

关于如何改进的任何想法ClearCache?


我过去做过类似的功能(但我不记得在哪里)。

下面的代码能满足您的所有需求吗?

ClearCache[f_] := DownValues[f] = DeleteCases[DownValues[f], 
                                              _?(FreeQ[First[#], Pattern] &)]

这也许应该扩展到UpValues and SubValues。还有Head of f受限于Symbol.

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

Mathematica:如何清除符号的缓存,即取消设置无模式的 DownValues 的相关文章

随机推荐

  • Volley AppController 类对象返回 null

    我正在制作一个应用程序JsonObjectRequest并使用 Android 版 Volley Networking Library 从 URL 检索 JSON 数据 应用控制器 java public class AppControll
  • 在 Visual Studio Code for Mac 中设置 TFVC 存储库

    我正在尝试在我的 Visual Studio Code for Mac 上的 VSTS 中设置托管的 Team Foundation 版本控制 TFVC 存储库 我根本没用过Visual Studio 显然 我的客户正在使用 TFVC 系统
  • Array.Clone() (复制还是不复制?)

    我怀疑我只是误解了 Array 类的 Clone 方法 然而它显示 创建 System Array 的浅拷贝 所以我认为这意味着新的对象指针 而不是相同的对象指针 下面的事情真的应该发生吗 假设测试对象 public class testO
  • 使用主机路径与 Kind Kubernetes Cluster 共享本地目录

    我想与 kind 集群共享我的非空本地目录 基于这里的答案 如何在 Kind 中引用本地卷 docker 中的 kubernetes https stackoverflow com questions 62694361 how to ref
  • Nginx / PHP FPM 优雅停止(SIGQUIT):不太优雅

    运行 nginx 1 9 PHP 7 0 但 5 6 中的行为也完全相同 尝试优雅地停止 PHP FPM nginx 组合以在维护期间关闭节点 为此 我将 SIGQUIT 发送到 php fpm 这should提供优雅的关闭 为了测试这一点
  • Android SearchView 样式下拉弹出窗口

    我想知道如何设计Android 4 0的下拉弹出窗口的样式SearchView 我正在使用Theme Sherlock Light DarkActionBar 但我不知道如何将下拉搜索样式设置为白色背景和黑色文本 由于某种原因 使用 sea
  • 多行字符串中的 YAML 注释

    YAML 是否支持多行字符串中的注释 我正在尝试做这样的事情 但验证器抛出错误 key comment value comment value value comments here don t work either 不 根据YAML 1
  • 在 CakePHP 中使用 HighchartsPHP 库

    我正在尝试使用ghunti的HighchartsPHP http www goncaloqueiros net highcharts phpCakePHP 中的包装器 以便我可以在我的项目中使用它 在演示中它说要编辑config php并包
  • Java 输入流到 Python (PY4J)

    我正在使用 PY4J 在 python 中运行 Java 代码 http py4j sourceforge net http py4j sourceforge net 我的java函数返回一个InputStream 我想在我的python代
  • 从 CDN 延迟加载

    是否可以从外部服务器加载惰性模块 我想将我的资源上传到 CDN 但似乎惰性模块是从我的 node js 服务器加载的 这对我来说并不好 我的服务器仅提供角度应用程序的index html 但资源将从cdn加载 它启动并正常工作 直到加载一个
  • 如何在不将文件存储在服务器端的情况下向浏览器提供 PDF?

    我有两个方法 一种在服务器端生成 PDF 另一种在客户端下载 PDF 我怎样才能做到这一点而不将其存储在服务器端并允许客户端直接下载它 以下是两种方法 public void downloadPDF HttpServletRequest r
  • 如何取回现有的消息队列 ID

    我正在使用 msgget 系统调用来获取新的消息队列 我在其中使用了 IPC CREAT 和 IPC EXCL 标志 喜欢message queue msgget ftok tmp 100 0666 IPC CREAT IPC EXCL 现
  • Python copy:如何继承默认的复制行为?

    好吧 这可能是一个愚蠢的问题 但我现在找不到答案 我需要实现一个对象的复制 我想要复制该对象的所有属性 除了我想要完全控制复制的一两个属性 这是对象的标准复制行为 gt gt gt class test object def init se
  • 尝试在 MatLab 中编译 C mex 文件

    嘿 我试图在 MatLab 中编译一个 C 文件 但我收到了这个错误 我正在尝试理解它 非常感谢任何和所有指导 gt gt mex BDS unpack mex5 c xcrun error SDK macosx10 7 cannot be
  • Python IndexError:列表索引超出范围

    我试图让 Python 用 500 只股票的收盘价填充列表 虽然该代码似乎只适用于少数股票 但数量过多就会带来问题 Python 不断给我以下错误 OneClose append Data i 4 IndexError list index
  • 将数据从 C++ 传递到 PHP

    我需要将一个值从 PHP 传递到 C 我想我可以用 PHP 来做passthru 功能 然后我希望 C 对该值执行某些操作并将结果返回给 PHP 这是我无法解决的问题 有谁知道如何将数据从 C 传递到 PHP 我不想使用中间文件 因为我认为
  • 如何使用VBA截取网页截图?

    如何在Excel中使用VBA截取网页截图 问题是 屏幕截图只能通过按键盘的 F6 键来进行 因为 Screenhunter 就是用于此目的的 打印屏幕键被禁用 我使用了以下代码 但意识到无法使用sendkey函数 sub test appl
  • Numpy n 个奇数根(包括负值)

    我想在Python中计算一些数字的n次奇根 Numpy 作为立方根函数 使用该函数我可以计算 x 1 3 x np linspace 100 100 100 np cbrt x gt gt gt array 4 64158883 4 268
  • 如何设置 CultureInfo.InvariantCulture 默认值?

    当我在 C 中有这样一段代码时 double a 0 003 Console WriteLine a 它打印 0 003 如果我还有另一段代码 double a 0 003 Console WriteLine a ToString Cult
  • Mathematica:如何清除符号的缓存,即取消设置无模式的 DownValues

    我是一个糟糕的缓存器 有时 当没有人在看时 我会缓存结果而不包含完整的上下文 如下所示 f x f x x a a 2 f 1 DownValues f Out 2 HoldPattern f 1 gt 3 HoldPattern f x