gpt4 book ai didi

Perl:使用单个方法重新定义父类的所有方法

转载 作者:行者123 更新时间:2023-12-04 09:27:40 26 4
gpt4 key购买 nike

我正在为我的 Perl 应用程序编写一个文件管理器。每个文件的信息都保存为一个对象。当我删除一个文件时,我想将相应对象的类更改为 RemovedFile。对于此类,调用"file"的任何有效方法都将返回 fatal error 和堆栈跟踪。这将是为了捕获一些对这个对象的过时引用被保留的情况(虽然它不应该)。
我想了两种方法可以实现这一点:

  • “RemovedFile”继承自“File”并通过调用 fatal error 重新定义其所有方法。不利的一面是,如果我向"file"添加一个新方法,我也需要将它添加到“RemovedFile”中。
  • 向"file"的每个方法添加对某个空方法的调用。 “RemovedFile”将重新定义这种报告 fatal error 的方法。 (有关我的意思的示例,请参见下面的代码)。不利的一面是,"file"的每个方法都必须在开始时调用“remove_guard”,而 IMO 不是很干净。
  • # Inside File class:
    sub any_method_of_file_class {
    $self->_removed_guard();
    #rest of code
    }

    sub _removed_guard {
    #do nothing
    }

    # Inside RemovedFile class redefine only _removed_guard:

    sub _removed_guard {
    $self->{logger}->fatal_with_stack_trace();
    }
    我想问是否有更好的方法在 Perl 中实现这种行为?
    例如,我可以使用一些技巧来首先列出然后动态地重新定义父类的所有方法而不指定它们的确切名称吗?

    最佳答案

    您可以定义 RemovedFile 类,与原始 File 类没有任何关系。在 RemovedFile 中,使用 AUTOLOAD处理任何方法。

    关于Perl:使用单个方法重新定义父类的所有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62949880/

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