首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法让hunchentoot:*dispatch-table*在函数重新定义时自动更新?

hunchentoot是一个常用的Common Lisp Web服务器库,而hunchentoot:dispatch-table是用于定义URL路由的变量。当我们重新定义函数时,hunchentoot:dispatch-table不会自动更新,但我们可以通过一些方法来实现自动更新。

一种方法是使用hunchentoot的回调函数机制。我们可以定义一个回调函数,当函数重新定义时,该回调函数会被调用,然后我们可以在回调函数中更新hunchentoot:dispatch-table。以下是一个示例:

代码语言:txt
复制
(defvar *dispatch-table* (make-hash-table :test 'equal))

(defun update-dispatch-table ()
  ;; 更新 *dispatch-table* 的逻辑
  (setf (gethash "/path" *dispatch-table*) 'new-handler))

(defun my-handler (request)
  ;; 处理请求的逻辑
  (format t "Handling request~%"))

(defun define-handler ()
  ;; 定义处理请求的函数
  (defun my-handler (request)
    ;; 新的处理请求的逻辑
    (format t "Handling request with updated logic~%")
    (update-dispatch-table)))

(defun start-server ()
  ;; 启动服务器
  (hunchentoot:start (make-instance 'hunchentoot:acceptor :port 8080))
  (update-dispatch-table))

(define-handler)
(start-server)

在上面的示例中,我们定义了一个全局的哈希表变量dispatch-table来存储URL路由信息。在update-dispatch-table函数中,我们可以根据需要更新哈希表的内容。在define-handler函数中,我们重新定义了my-handler函数,并在其中调用了update-dispatch-table函数来更新dispatch-table。最后,在start-server函数中,我们启动了hunchentoot服务器,并在启动前调用了update-dispatch-table函数来确保dispatch-table已经更新。

另一种方法是使用符号宏来实现自动更新。我们可以定义一个符号宏,每当我们重新定义函数时,该符号宏会被展开并更新hunchentoot:dispatch-table。以下是一个示例:

代码语言:txt
复制
(defvar *dispatch-table* (make-hash-table :test 'equal))

(defmacro define-handler ()
  ;; 定义处理请求的函数
  `(defun my-handler (request)
     ;; 处理请求的逻辑
     (format t "Handling request~%")))

(defmacro update-dispatch-table ()
  ;; 更新 *dispatch-table* 的逻辑
  `(setf (gethash "/path" *dispatch-table*) 'new-handler))

(defun start-server ()
  ;; 启动服务器
  (hunchentoot:start (make-instance 'hunchentoot:acceptor :port 8080))
  (update-dispatch-table))

(define-handler)
(start-server)

在上面的示例中,我们使用了两个符号宏:define-handler和update-dispatch-table。当我们调用define-handler时,它会展开成一个函数定义,并定义了my-handler函数。当我们调用update-dispatch-table时,它会展开成一个setf表达式,用于更新dispatch-table。通过使用符号宏,我们可以在函数重新定义时自动更新hunchentoot:dispatch-table

以上是两种实现自动更新hunchentoot:dispatch-table的方法。根据具体的需求和代码结构,您可以选择适合您的方法来实现自动更新。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

想更快的写完代码?dataclass 来帮你!

问题是,后面还有可能增加字段或删除字段,有没有办法定义好类的成员变量之后,这些方法去自动更新?省的我改来改去?...注意上述的 frozen = True 表示对象是不可变对象,初始化完成之后,不可对成员重新赋值,这一点可以应用在固定对象,不可变的配置信息等应用场景下,非常实用。...如果 eq 和 frozen 都是 True,则会生成 __hash__ 方法 如果你仍然要自己动手写这些函数也是可以的,比如说:当你自定义了 __init__(),init = x 这个参数会被忽略...但是这些比较方法的一个缺陷是,它们使用类中的所有字段进行比较,有没有办法某些字段不参与比较呢?...class User: name: str = field(compare = False) age: int height: float 同样的,如果你不希望某个字段显示

43930

波哥回来啦!~修复k8s一键部署脚本各种bug

但是也我发现了不少问题,咱们的k8s脚本似乎有几个bug,我加入了相应的修复代码。目前1.14.1至1.15.4版本都已经修正。大家可以尝试下载使用了。...客户端版的,可以等待客户端版自动更新后台脚本,如何更新?就是当你使用客户端版的时候,发现红框位置没有内容输出的时候,那就是后台再更新脚本,你们不要着急,网络快的等几秒就能更新完毕,慢的也就3分钟吧。...你的脚本就自动更新为最新版本的了。此期间不要刷新页面哦。 咱们目前就是两个开源项目,若干实用脚本,一个C端产品往前走。其实我想录一些实用小视频跟大家交流相关技术。但是感觉摊子铺的太大了。...那就没办法了。波哥花钱买的然后免费分享给你们。。。没了就没了吧!有空我再整理一下看看有没有什么好玩意免费分享给你们吧。...而不是重新搭建了。我评估一下大概时间,如果用不了多久,那就先上这个哈!

31220
  • Win10自动更新关闭方法

    一、为什么很多人会选择禁用Win10自动更新? 1.win10自动更新定义: Win 10的自动更新功能,即 Windows Update。这项功能本意是为一些软件、漏洞等提供更新服务。...Win10的自动更新为他们带来了很多困扰,之前熟悉的操作方式,已经用的熟练的系统,一更新又得重新适应。...有些人是浏览网页,或者做一些其他无关紧要的事情,遇到这个情况,这些人的损失并不大。但是还有很多人是工作或游戏中突然被打断,被迫停下手头的事情,看着电脑屏幕一脸懵逼。...还有些人反映更新后电脑上的应用经常性闪退,非常影响使用体验,人恼火。甚至说还有一些使用者发现更新之后自己的文件不见了,数据也少了一部分,用什么办法也没有用,无法恢复。...总之,更新需谨慎,一定要挑好时间,急需使用电脑的时候,不要随意更新,那么接下来就给你们推荐关闭win10自动更新办法了。 二、如何关闭win10自动更新 1、点击开始菜单,即左下角 ?

    2.8K10

    声明式渲染与 data 函数

    当message改变,模板会自动更新。 这是由于vue2基于Object.defineProperty()给data中的每个属性定义了一对setter/getter。...当模板渲染,getter被调用,视图依赖的数据项被记录下来;当数据改变,检查改变的数据有没有被依赖,如果有,重新渲染视图。...data 必须是一个函数 如果直接返回一个对象,vue-cli3中,编译阶段直接就报错了。...data虽然是一个函数,但是返回的却是一个const对象。const data项目仅会声明一次,多个组件实例中是唯一的。 如图所示,单击任何一个组件,其它组件亦受影响: ?...即使data function是一个函数,也仅是初始化时调用一次,然后函数返回的值就一直保存在了vm._data上。在后续的运行时数据发生,改变的也是vm.

    58920

    启动计算机配置windows7,win7开机显示准备配置Windows请勿关闭计算机 然后无限重启怎么回事…

    7)页面右边找到“windows update”选项,该选项下方选择“启用或禁用自动更新”,单击它,页面跳转到第3步骤中的页面,然后按第3步骤设置就完成了。...如果是老系统 那么就是你系统自动更新的过程中出现的问题 你开机F8 进入最后一次的正确配置选项进入 如果不行 继续F8 进入系统 关闭windows update然后重新启动 如果还是不行 继续F8安全模式...删除最近更新的几个安全补丁然后重新启动 如果依然还是不行 就只有看你有没有备份 只有考虑恢复系统了. windows自动更新之后 最好不要直接关掉电源 等他正常关机 虽然你直接断电以后 系统会在下次开机的时候出现准备配置的操作...不忙他把那些补丁把完就行了!最好电脑安装了杀毒软件把更新功能关闭就好了! win7开机时显示 准备配置windows 请勿关闭计算机 然后就不动了!...继续F8 进入系统 关闭windows update然后重新启动 如果还是不行 继续F8安全模式 删除最近更新的几个安全补丁然后重新启动 如果依然还是不行 就只有看你有没有备份 只有考虑恢复系统了.

    2.4K20

    命令行 一键完成 所有R包更新

    (一)msigdbr 有没有办法解放双手,后台更新R包,避免一直看着更新的进度条?...解决办法 命令行中实现BiocManager::install(version = "3.18"),即在R的命令行界面之外安装Bioconductor版本或R包,可以通过调用R脚本执行。...下面对每个部分进行解释:​nohup: 这是一个命令,意为"no hang up",用于命令在后台一直运行,即使用户退出登录或终端关闭。yourcommand: 这是你要在后台运行的命令。​...&: 这个符号是将整个命令放入后台运行,以便你可以终端中继续输入其他命令,而不用等待该命令执行完毕。​...这条命令将会执行脚本,安装指定版本的Bioconductor,并在需要自动更新所有包,无需任何用户交互。 这种方法适合于自动化脚本或在无法进行交互式操作的环境中执行,如在批处理作业、自动化脚本。

    31710

    React 学习笔记之状态(state)和生命周期

    案例可能与官方不是很匹配,是因为我经过刻意修改,为的是以国人理解的方式再重新梳理一遍,大家更容易理解。...h1 标签中显示了当前时间,但是你会发现这个时间是个静止的时间,很明显,它没什么实际作用,我们要想办法它动起来。...然后 render 中显示了 this.state.date 中的内容。但同样,这个时间还是静止的,我们要想办法它一秒变一次。那么接下来就用到了生命周期相关的接口。...我们 componentDidMount 函数中增加了一个定时器,每一秒调用一次 tick 函数,这个函数是我们新实现的,目的就是调用一下 setState 方法来设置 state 里面的值,当 state...这样我们就实现了时间的自动更新。最后组件即将被销毁,我们有调用了 clearInterval 清除了定时器。最终时间就会在界面上自动变更了。

    40920

    40行代码把Vue3的响应式集成进React做状态管理

    ] = useReducer(s => s + 1, 0); return forceUpdate; }; 复制代码 这是一个很经典的自定义hook,通过不断的把状态+1来强行组件渲染。...而rxv的核心api: useStore接受的也是一个函数selector,它会用户自己选择组件中需要访问的数据。...指定依赖发生更新,需要调用的函数是当前正在使用useStore的这个组件的forceUpdate强制渲染函数。 这样不就实现了数据变化,组件自动更新吗?...StoreContext.Provider; 复制代码 这个option是传递给Vue3的effectapi, scheduler规定响应式数据更新以后应该做什么操作,这里我们使用forceUpdate去组件重新渲染...那么store里的值更新了以后,触发了scheduler也就是forceUpdate,我们的React组件就自动更新啦。

    72820

    React 学习笔记之状态(state)和生命周期

    案例可能与官方不是很匹配,是因为我经过刻意修改,为的是以国人理解的方式再重新梳理一遍,大家更容易理解。...h1 标签中显示了当前时间,但是你会发现这个时间是个静止的时间,很明显,它没什么实际作用,我们要想办法它动起来。...然后 render 中显示了 this.state.date 中的内容。但同样,这个时间还是静止的,我们要想办法它一秒变一次。那么接下来就用到了生命周期相关的接口。...我们 componentDidMount 函数中增加了一个定时器,每一秒调用一次 tick 函数,这个函数是我们新实现的,目的就是调用一下 setState 方法来设置 state 里面的值,当 state...这样我们就实现了时间的自动更新。最后组件即将被销毁,我们有调用了 clearInterval 清除了定时器。最终时间就会在界面上自动变更了。

    13130

    React 学习笔记之状态(state)和生命周期

    案例可能与官方不是很匹配,是因为我经过刻意修改,为的是以国人理解的方式再重新梳理一遍,大家更容易理解。...h1 标签中显示了当前时间,但是你会发现这个时间是个静止的时间,很明显,它没什么实际作用,我们要想办法它动起来。...然后 render 中显示了 this.state.date 中的内容。但同样,这个时间还是静止的,我们要想办法它一秒变一次。那么接下来就用到了生命周期相关的接口。...我们 componentDidMount 函数中增加了一个定时器,每一秒调用一次 tick 函数,这个函数是我们新实现的,目的就是调用一下 setState 方法来设置 state 里面的值,当 state...这样我们就实现了时间的自动更新。最后组件即将被销毁,我们有调用了 clearInterval 清除了定时器。最终时间就会在界面上自动变更了。

    16930

    Signalr系列之虚拟目录详解与应用中的CDN加速实战

    我们先解释一下:这个路径前面的/Signalr/是目前你所有的SignalR的Hub客户端连接所访问的服务地址,后面的"/hubs"则是将要下载的前端JS资源,当我们Startup类中app.MapSignalR...收到第一个URL请求的时候会根据hub中的代码动态的创建一个JS脚本放在这个目录里面(注:这种动态创建只会在第一次访问发生一次), 如下图,我们可以看到我们Hub中所写的方法全部自动生成的Hub.js...那么有没有办法这些JS手动生成,并且由我们来进行控制呢?...虽然到此,我们就已经可以进行自己的CDN加速了但是开发的过程中,还是会很麻烦,每次修改hub都需要手动生成一次hubs.js 有没有简便的方法呢?,那必须的.. 我们项目目录下找找.....:$(TargetDir) /o:$(ProjectDir)Scripts/hubs.js 这样我们每当我们重新生成或者编译的时候就会自动更新Scripts下的hubs.js了..

    1.7K50

    reactive + effect + track + trigger 实现响应式系统

    副作用函数关于 effect 方法的理解,一直以来都十分模糊,直到看了 《Vue.js设计与实现》 这本书中的相关介绍。书中将 Vue3 提供的 effect 定义为用来注册副作用函数的一个方法。...effect 方法要做的事情,就是将这个原本属于用户的逻辑封装起来,交给框架来管理,合适的时机去调用。所谓合适的时机,无非就两个,一是页面首次渲染,二是它依赖的数据更新。...fn 所依赖的属性;当其依赖的属性发生变化后,再想办法通知 fn 再次执行。...if(isObject(res)) { return reactive(res) } return res }}复制代码实现 track 方法该方法定义...之后,结合上篇文章实现的 reactive 方法,属性被访问到时,进行依赖收集,主要依靠 track 方法 ;当属性发生变化后,再利用 trigger 方法,通知收集来的 _effect 重新执行。

    70650

    『JSA宏神助攻之四』JSA宏连接外界,全面使用JS生态轮子库

    所以当务之急是:JSA能够用上现代轮子库才是关键。 有什么办法可以做到呢?前期有人实践过,直接把某个js轮子库的代码复制粘贴到某个模块里,是可行的。...研究如何RPA更好地调用JSA的过程中,灵机一动,可以使用javascript的动态语言特定,直接将写好的代码,保存为字符串,然后使用eval函数执行它,岂不就可以了吗?...笔者首先想到了,虽然Excel/WPS表格里,一个单元格的能容纳的字符串长度有限制,最多32677个字符,那我用多个单元格来存储,再到JSA里重新拼接,不就可以了?...所以就立马开工,改造了一下原来的自定义函数,增加了一个GetFileContentsByItemLength函数Excel催化剂里可自动更新同步最新版下来,可在公众号后台回复:插件下载,获取最新版下载地址...只要在JSA里,读取这个连续单元格区域,再将它重新连接起来,就可以eval方法里运行,如下图,加载完lodash库后,就可以执行它的方法如: _.concat。

    15010

    『JSA神助攻之四』JSA宏连接外界,全面使用JS生态轮子库

    所以当务之急是:JSA能够用上现代轮子库才是关键。 有什么办法可以做到呢?前期有人实践过,直接把某个js轮子库的代码复制粘贴到某个模块里,是可行的。...研究如何RPA更好地调用JSA的过程中,灵机一动,可以使用javascript的动态语言特定,直接将写好的代码,保存为字符串,然后使用eval函数执行它,岂不就可以了吗?...笔者首先想到了,虽然Excel/WPS表格里,一个单元格的能容纳的字符串长度有限制,最多32677个字符,那我用多个单元格来存储,再到JSA里重新拼接,不就可以了?...所以就立马开工,改造了一下原来的自定义函数,增加了一个GetFileContentsByItemLength函数Excel催化剂里可自动更新同步最新版下来,可在公众号后台回复:插件下载,获取最新版下载地址...只要在JSA里,读取这个连续单元格区域,再将它重新连接起来,就可以eval方法里运行,如下图,加载完lodash库后,就可以执行它的方法如: _.concat。

    14110

    手动设置的静态DNS老是变成DHCP,如何破

    cos.ap-beijing.myqcloud.com/CLOUDBASE-INIT_INSTALL1.PS1 下载放到上步买的机器桌面,打开powershell命令行,把桌面的脚本拖到命令行回车,然后等10分钟左右,会自动更新...cloudbase-init到最新稳定版 3、升级到最新稳定版后重启机器,然后配置静态DNS,重启前重新review一遍,确定在重启前确确实实静态DNS已经生效了,然后重启机器观察看静态DNS有被reset...单引号引起来、英文逗号隔开就行 图片.png 改好后的脚本放到这个目录下C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts,按照常规办法修改静态...DNS,修改后重启机器,过个两三分钟去看,看看DNS有没有被reset成dhcp,如果没有,那就OK。...如果还是不行,把代码里的3改成2试试 图片.png 代码里的2和3两种情况我都遇到过,由于cloudbase-init是通过调用powershell代码起作用的,我猜测这个判断逻辑2和3的差异可能自定义镜像有常驻的开机计划任务开了弱干个

    2.2K40

    Windows Update服务启动弹出“拒绝访问的解决方案

    Windows Update服务启动弹出“拒绝访问的解决方案” 概述展开目录 说起 windows 自动更新相信这是很多人又爱又恨的东西,爱在于它可以带给我们更新更安全的系统,让我们的生活添加一些新意...作者对于 windows 自动更新忍无可忍,从注册表层关闭了 windows 自动更新;但是当时年少无知,只图一爽快,确实很长的一段时间没有再更新,但是当有一天我需要自动更新的时候却发现自动更新的服务怎么也打不开了...,具体表现在开启 windows update 服务会提示拒绝访问 image.png 经过多次的探索,终于今天成功开启了自动更新,并开始了一次漫长的更新,第一次感觉到了自动更新是多麽的开心!!...在这里记录下这一过程,会开启,会关闭,才算真正学会这一大法,本文介绍方法反之即可作为彻底禁用自动更新办法!...image.png 参考文献展开目录 WIN10 禁用更新,不是办法办法

    65.2K81

    VisualStudio中提供运行时和设计时支持的WPF本地化解决方案

    使用代码 ObjectDataProvider自动更新 为了更改当前区域设置自动更新元素,我正在利用ObjectDataProvider提供的功能特性。...所有的 ResXFileCodeGenerators (默认和自定义)都将资源 Resources 构造函数标记为 internal(内部的),这意味着只能从同一程序集中访问它。...(另一种选择可能是扩展现有的自定义ResXFileCodeGenerator来标记构造函数为public,但不需要这样做) ? …的方法: ?...我这样做是为了避免添加新区域设置需要重新构建应用程序。 对于现有的已安装的程序,您只需要创建一个带有新的区域设置名称的文件夹,并将新的正确命名的资源DLL放入其中。...因此,当在eventhandler中重新获取值,更新的资源值是可用的。或者,您可以确保知道ODP已更新后重新获取本地化后的值,这没什么区别。 ?

    1.9K20

    Excel催化剂开源第21波-使用Advanced Installer打包VSTO几个注意问题

    Excel催化剂一直也同样有提供离线版打包工具打包成EXE文件一键安装的方式,不过鉴于Excel催化剂功能还在不断迭代开发中,打包的方式,暂时还不会做自动更新功能,所以不建议使用离线版安装 Excel...一般选择解决方案文件即可 想程序以管理员的方法安装,所有用户都可用 这个实际情况的确出现过,用户电脑不是管理员身份,电脑被限制了安装软件的权限,在用户电脑上没法正常安装VSTO项目,用管理员权限安装成功后...非向导中可以看到有多个类型修改,但不管用 解决办法:有可能VSTO的项目,Excel读取,只会在注册表Current User上目录下寻找插件,管理员权限安装,不会在当前Current User上写入条目...例如Excel催化剂因在线版自动更新的要求,将许多配置文件给分离出来,重新做了个Console程序供用户手动将这些配置文件复制到程序数据文件夹中,离线版安装过程中,想一步到位,无需提示用户多一步运行Console...,设置32位还是64位,貌似只影响最终安装将文件存放到哪个位置而已,是program files 还是program files(86),亲测了一下,打包选64位,32位OFFICE上安装还是可能成功

    1.1K30

    python笔记73-动态导入模块import_module 和 重载reload

    python动态加载import_module 和 重载reload 的使用 python环境:V3.6.x import_module 当我们在运行一段程序,根据需要动态加载一个模块,调用里面的方法,...模块新增一个fun3()函数,yoyo.py内容如下 def fun1(): return "hello world" def fun2(): return "上海-悠悠" def...,因为在前面已经导入了模块,模块里面的2个函数,已经被加载进去了,后面模块更新的内容是不会自动更新的。...那么有没什么办法,可以新增方法后,重新系统加载一次模块呢?...>>> new = importlib.reload(sys.modules['yoyo']) >>> new.fun3() '123456' 重新reload()后,依然可以调用到fun3()函数,被删除的方法不会剔除

    1.4K50

    一日一技:如何正确自己项目里面集成别人的代码?

    我们知道,使用 Python 的时候,如果我想使用别人发布的第三方库,那么我们可以使用pip进行安装。...所以你没有办法使用 pip 进行安装。要使用它本身很简单,直接把这个文件JsonPathFinder.py复制到你自己的项目里面就可以了。...但是这样一来,你不知道我什么时候更新了代码,难道你每天要上来看看我有没有更新? 为了解决这个问题,我们可以使用git submodule功能。...这个功能,可以你把一个 Git 源挂载到另外一个源里面。 假设我们现在有一个项目:test_module,它想使用JsonPathFinder来解析 JSON,假设项目的代码如下图所示: ?...你完全可以把这条命令写到 Makefile 里面,结合我以前讲 Makefile 的文章,做一个自动更新的功能,每次当你要运行自己项目的时候,都自动更新一下子模块。

    79820
    领券