返回介绍

17.1 函数的数据含义(返回值)只能表明 x’与 Sx 之一

发布于 2024-12-15 23:01:52 字数 1759 浏览 0 评论 0 收藏 0

我们为什么需要状态?

事实上我们是把两种时序依赖都最终归结于“数据依赖”,进而将这种依赖关系委托于这个“(数据全集中的)状态”。并且,我们要求状态本身只是纯粹的数据,而将状态的相关逻辑视作公共规约。我们其实是在讨论如图 45 所示的模型:

图 45 将状态从纯数据中剥离,并讨论与逻辑步骤(Step) 间的关系

这一模型的本质仍是基于“逻辑作用于数据”这一思想。也就是说,它是基于命令式语言设计范式:我们将状态{Sx}视为{*x’, x“*}的操作句柄,并通过某种规则在 Step1, … , StepN 之间传递该句柄的执有权(类似于一种令牌)。

既然Sx的抽象含义要求“含义与可操作性”明确,同时我们也知道,函数既包含一个数值含义的传出,也包含可操作性明确的逻辑,可见函数在抽象概念上是满足“状态”的两个要素的。那么,Sx本身为什么不能是一个函数呢?

问题仅在于,“状态”作为数据含义时是与{*x’, x“*}相关的,而“函数”作为数据含义时是指它的传出。也就是说:

1
2
3
  function foo() {
    return 5;
  }

可以在数据上表明:

foo = 5

但这也导致我们无法通过 return 来表明 foo() 这个函数的(数据含义的)状态 1

解决这一问题的方法,就是消息。例如:

1
2
3
4
  function foo() {
    send(bar, '...')
    return 5;
  }

这个例子中, foo()bar() 发送了一个消息’…’,这个消息用于指明 foo 当前所持有的数据的某个状态。由于 foo() 可以持有多个数据——多个数据全集,或者由多个子集构成的集合——所以它也可以发送一个复合信息的消息,或用某个单一消息来指示所有数据的状态。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文