2 回答
TA贡献1829条经验 获得超6个赞
这是使用空合并运算符的PHP 7 或更高版本:
<?php
function a()
{
return (b() ?? c());
}
function b()
{
return null;
}
function c()
{
return 'result from c';
}
var_dump(a());
TA贡献1876条经验 获得超5个赞
我将展示 JavaScript 中的示例,因为我更熟悉它。这些将是我们的B和C功能:
function B() {
return Math.random() > 0.5 ? 'B' : null;
}
function C() {
return 'C';
}
1. 依靠逻辑短路评估 or
function A() {
return B() || C();
}
请注意,这与您想要的有点不同,因为B()只有当它是非假值时才会返回结果。
2. 使用效用函数
function firstNonNullResult(functions) {
for (const f of functions) {
const result = f();
if (result !== null) {
return result;
}
}
}
function A() {
return firstNonNullResult([B, C]);
}
3. 使用惰性求值
某些语言,例如 Haskell,在需要结果之前不会计算表达式,这允许您编写类似find isJust [B, C], whereC仅在不B返回任何内容的情况下进行计算的内容。
在 JavaScript 或 PHP 中,您可以使用生成器实现类似的效果。
function* map(items, fn) {
for (const item of items) {
yield fn(item);
}
}
function find(items, predicate) {
for (const item of items) {
if (predicate(item)) {
return item;
}
}
}
function call(fn) {
return fn();
}
function A() {
return find(map([B, C], call), x => x !== null)
}
- 2 回答
- 0 关注
- 129 浏览
添加回答
举报