gpt4 book ai didi

c# - 如何在将加载到 Redis 的 LUA 脚本上重用代码?

转载 作者:IT王子 更新时间:2023-10-29 06:11:03 26 4
gpt4 key购买 nike

目前我制作了一些加载到 Redis 以执行一些命令的 LUA 脚本。有些功能对所有脚本都是通用的,比如解析内容或数据转换,我一直在脚本之间进行复制/粘贴,而不是简单地重用它们。无法发出“要求”,因为 Redis 将无法知道在哪里加载文件。

对于我添加的每一个脚本,维护噩梦都会变得更大!

如何将 DRY 原则应用于这种情况?我想到的唯一方法是T4 代码生成器

我可以用这段代码制作一个“lua”文件:

#import "DataTransformer.lua"

T4 将尝试读取每个扩展名为 .lua 的文件并查找标签 #import。对于每个 #import 标签都会找到相应的文件并用实际代码替换该行。这样T4会自动复制/粘贴。

“DataTransformer”中的代码应该分配给一个名为“DataTransformer”的对象,并且导入 DataTransformer 的代码可以使用对象 DataTransformer.{function} 来使用它。

这是否有意义,或者是否有更简单的方法来实现这一点?

最佳答案

tl;dr 不 - 没有这样的方法,使用 T4 或任何其他预处理器来查找和替换是最好的方法。

细节:至少有两种未记录的方法可以做你想做的事(一种在 for_stack 的答案中,另一种涉及全局元表),但你真的不应该使用它们。未记录意味着它们可能无法在未来的版本中工作...

脚本应该是独立的。如果脚本依赖项在运行之前已加载,您真的不想开始担心。只要您使用缓存的脚本(使用 SCRIPT LOADEVALSH),除了维护所有副本之外,复制相同的负载并没有真正的开销。最好的方法是在部署之前将可重用元素从模板“注入(inject)”到脚本中。这样,您还可以独立地对可重用对象进行单元测试。

关于c# - 如何在将加载到 Redis 的 LUA 脚本上重用代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43401756/

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