我发现自己偶尔需要执行函数的“探测”版本。
举一个简单的例子,在开发评估器时,我可能想做一个尝试性的评估,看看当前的依赖信息是否足够。在这种情况下,我将调用 eval 函数,就好像它是一个探针一样,即,我只关心它的返回值 bool ,表示成功/失败。最重要的是,由于这只是一个尝试性的尝试,我希望在整个执行过程中保持所有内容完好无损,换句话说,在探测之前和之后,诸如依赖性/计数器/备忘录/等的数据不会有所不同。
现在,如果探测函数足够简单,我当然可以创建一个模仿旧函数的新函数,除了每个写操作都是在深度复制上进行,等等。
但是,如果函数有几千行代码,而且逻辑如此交织在一起。写一个新的已经不再实用了。我只能依靠回归系统来帮助识别尽可能多的问题并承担潜在的风险。
因此我想知道
编辑:
各位同学,我还在这里期待大家的意见和指教。我注意到有一些投票来结束这个问题,如果我要求的功能看起来不合理,我想在这里了解为什么,是我的设计模式在某个地方如此错误,以至于我不得不做这种不必要的尝试吗?有什么办法可以避免这条路吗?还是我误解或错过了什么?
另外,我突然想到,有些函数也可能有socket连接,比如说评估器的例子,建立了一个Redis连接,会记录不同用户的写作风格,比如说,有多少比例的用户写RPN(反向波兰表示法) )等,帮助进一步优化。我认为分叉方案无法处理这个问题。但我们忽略并假设不涉及网络套接字:)
您可以尝试将“函数”编写为对象方法,并进行适当的封装。
然后:
使用 fork() 来做到这一点可能是一个非常糟糕的主意,除非你真的知道你在做什么并且绝对没有其他解决方案。
如果你确实有套接字连接,并且探针接触到它们,你不能保证没有副作用(除非你所有的套接字访问都是幂等的),所以它可能是不可行的。
抱歉,我无法更准确,因为您的问题很模糊......