我想从内部按顺序调用函数 B 和 C 的函数 A 中获得第一个成功的结果。
这里的关键点是 - DRY。这意味着我不想引入新变量(例如保持前一个函数调用的结果状态 - 见坏示例#1),我不想重复我的动作(例如两次调用同一个函数 - 见坏示例#2)。
示例代码是用 PHP 编写的,但我不沉迷于 PHP,任何语言都可以接受。OOP,功能性,在这里无关紧要。
到目前为止我发现的可能导致解决方案的概念是使用 Maybe ( https://marcosh.github.io/post/2017/06/16/maybe-in-php.html ),有些人还建议使用 nil ( https://clojure.org/reference/data_structures#nil ) 作为返回类型。但是,我还没有足够的工作示例。我想知道这个解决方案是否可行,我什至开始阅读名为“注释图灵”的书,希望能找到一些指向问题或限制的链接......
坏例子#1(额外变量):
A() {
$B = B();
if($B !== null) {
return B();
}
return C();
}
坏例子#2(额外调用):
A() {
if(B() !== null) {
return B();
}
return C();
}
这里的关键点 - DRY: - 我不希望引入任何额外的变量(坏例子#1)。- 我不希望任何函数运行两次(坏例子#2)。
是否可以在不重复调用和/或将状态保存到额外变量的情况下编写此类代码?
如果是的话 - 我想看看。如果没有,那么我想有一个有效的证明,这是根本不可能写的。
肥皂起泡泡
慕运维8079593