Files
Endorphin-Document/authoring/examples/EX-03.md
T

2.7 KiB

EX-03 补全调用例子的上下文与结果

读者目标:理解后续调用如何使用前一次的结果。依据是当前 guide/09-functions-and-calls.md。函数与类型写法仍采用本书收录提案。

原稿

let amount = discountedPrice(price, discount)
return discountedPrice(amount, 5)

系统会自动搞定,最后拿到结果。

原稿缺少片段位置、函数声明、输入和结果,也没有指出读者应观察的数据依赖。

写作判断

先给依赖方函数声明,再给调用方归属与导入,最后用确定输入推演。无需介绍传输协议;需要保留名称可见性假设和提案状态。

成稿示范

组合两次定价调用

下面采用本书的函数语法提案,展示成功调用的结果依赖。跨 namespace 引用采用目标函数可见、名称无冲突的条件。

代码归属:atelier:shop.pricing。函数声明:

function discountedPrice(price: Number, discount: Number): Number {
    return price - discount
}

该函数从 price 中扣除 discount,并返回数值结果;Number 沿用第 7 章的统一数值类型名提案。

代码归属:market:shop.checkout。导入与调用方声明:

use atelier:shop.pricing

function payable(price: Number, discount: Number): Number {
    let amount = discountedPrice(price, discount)
    return discountedPrice(amount, 5)
}

对于 payable 的输入 100 和 10,预期计算如下:

步骤 输入 成功结果
第一次 discountedPrice 100、10 90,绑定到 amount
第二次 discountedPrice amount 为 90、优惠为 5 85,作为 payable 的返回值

第二次调用使用第一次的结果。因此,在 amount 的成功结果可用前,后续调用不能把它当作已取得的值使用。上述语义在 inflight 中体现;Preflight 检查调用目标、参数和返回类型等可静态判断的约束。

这里展示成功路径。失败、缺失、未就绪的具体处理语法仍按规范状态记录,不能将它们当作数值 0。仅凭这段数据依赖也不能推出所有函数参数的求值顺序。

反向验证

把输入换成 80 与 7:第一次得到 73,第二次得到 68。如果解释仍声称第一次固定返回 90,说明文字与规则没有连通。

检查例子没有为 Product 或其他 class 增加 get,没有使用未定义的 await、client 或官方导入路径。验证方式是按当前规则手算,未运行 Endorphin 程序。

采用的规则

DOC-004、009、010、011、013、015。代码、说明和结果表共同承担上下文与解释;不要求每个项目都单独显示一段“规则检查”。

对应任务 · 示例目录