• 建模杂谈系列182 FuncDict2_模式设计


    说明

    只有简单的模式才有生命力

    要解决复杂的问题,应当基于简单的结构。真理应该是可以瞬间被理解的,我们可以从其他领域进行迁移学习

    内容

    FuncDict如果是一个工具,我要用来做什么?

    目前我计划使用前端编辑器替代本地编辑器,其中很重要的一部分就是调试。当开发者在前端觉得新的编辑完成时会提交后台进行测试,有时候会成功,但更多时候会失败/出错。

    如果做一个比喻,一个个的函数相当于是一颗颗「沙子」,我们在调试的时候不知道是不是做好了,所以调试一次就会“扔”一次,而FuncDict就是这个扔的载体。

    从一个机器的角度看,FuncDict总是Load New Bullet, 然后试着发射 Fire, 然后输出打靶的结果 Result。 如果B制作有问题,直接就是哑弹(D)。

    所以模式可以总结为:

    • 1 Load A B
    • 2 Try To Throw A Target
    • 3 Verified B Or D

    1 LAB(Load A B)

    在Load的时候,比较安全的做法是保存一个文件,然后尝试载入。分为模块载入和函数载入,函数名是唯一主键

    2 TTTAT 验证

    调用测试,有可能函数本身语法错,或者是运行时的逻辑错;如果都没有问题才能返回正常结果。

    3 VBD 验证通过或失败

    错误的话是返回D

    4 LCB 载入复合

    特殊的复杂函数 CB , Compound B, 采用BFS寻找前序部分。前序部分会先在可选函数列表中搜索,形成一个模块(py),在导入本模块之前导入这个模块。

    5 OnBoard 上榜

    完成验证后,通过另一个接口,将函数发布。

    功能列表

    • 1 接受一段文本,并将之转为py文件
    • 2 从py文件中导入定义的函数,导入失败则为Load Fail
    • 3 函数导入后,则尝试Fire Target,此时导入Trigger(Data In),然后Throw, 失败则为D
    • 4 顺利Throw的话,可以和Target比较结果。
    • 5 和Target比较结果分为:
      • 1 数据结构比对
      • 2 集合比对
      • 3 标量比对

    概念列表

    结果

    • 0 每次的提交称为 ManuScript
    • 1 一次成功Throw称为一个 Try
    • 2 一次成功的Try(Target比对)称为一个 Hit
    • 3 一次认证的Hit称为一个Version

    命名

    • 0 函数的名称始终是唯一的 (Author)Funcname + BranchID + Version + TimeStamp构成唯一命名
    • 1 函数的manuscript、try和hit历史都可以在一次调试中回溯
    • 2 funcdict始终是为了解决某一个通用问题而存在的,其改动在于实现某一点的特殊功能;其管理范围和chain是有差别的。

    代码

    import hashlib
    def md5_trans(x):
        md5 = hashlib.md5()
        if isinstance(x, str):
            x1 = x.strip()
            md5.update(x1.encode("utf8"))
        else:
            md5.update(x)
        return md5.hexdigest()
    
    def get_file_name_before_prefix(x):
        last_dot = x.rfind('.')
        if  last_dot
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    高等教育学:教育心理学概述
    Guava Cache 原理分析与最佳实践
    WebPack5进阶使用总结(二)
    【uvm】How to write uvm sequence
    poi包工具类
    使用YOLOv5的backbone网络识别图像天气 - P9
    通付盾APP尽职调查报告:守护移动应用安全新篇章
    论文检测系统是怎么检测呢?
    小黑leetcode之旅:95. 至少有 K 个重复字符的最长子串
    PGSQL的distinct
  • 原文地址:https://blog.csdn.net/yukai08008/article/details/128166855