The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
在EO(以及我们基于其构建的𝜑-演算)中有三个要素:数据、原子和对象。存在一个数据化函数,将这三者结合在一起,使得EO程序变得活跃起来。以下是它与Java的配合方式,以在线商店为例。
假设我们正在制作一个在线商店,商品将被运送到不同的国家,我们必须根据顾客的位置计算运费。我们创建一个表示运费的抽象对象:
然后,假设我们有一个抽象对象customer-in-mysql
,它代表了MySQL数据库中的客户信息。要创建一个特定的客户jeff
,我们复制customer-in-mysql
,并将客户的ID指定为42
。
封闭对象jeff
是我们正在寻找的客户。我们假设它有country
子对象,这是cost-of-shipment
所需的。
现在,我们复制cost-of-shipment
,然后将其添加到产品价格中,以计算客户需要支付多少。
在这里,x
是一个新的对象,cost-of-shipment
的一个副本。然后,我们从中取出子抽象对象 add
并复制它,将 product.price
对象赋给它作为属性。我们将所创建的副本命名为 total
。然后,我们打印出总价格。
所有这些操作都还没有打印出数字。它们都是对象声明。我们声明了一个抽象对象cost-of-shipment
和几个封闭的对象:jeff
、x
、total
和app
。
现在最有趣的部分,我们称之为数据化。这是将对象转化为数据的过程。数据是指没有任何子对象的东西,是计算平台中最简单的元素,EO软件正在编译的地方。你可能认为在上面的例子中,42
和"US"
是数据。但它们不是。它们也是对象,我们可以这样写:
这些对象背后的数据在EO程序的层次上对我们来说是不可见的。数据在42
对象内部。只有特定平台的运行时可以通过数据化机制挖掘出来。如果将EO代码编译成Java,你将得到一个名为EOapp
的类(派生自app
对象),可以像这样进行数据化:
方法take()
将获取对象app
并尝试要求其将自身转换为数据。对象stdout
将重定向此请求到对象sprintf
,后者将向对象total
提出相同的问题:你有什么数据?对象total
是对象x.add
。如果我们查看一下x
是什么,我们会发现它是我们自己的抽象对象cost-of-shipment
的副本,它没有子对象add
!然而,它确实有一个子对象@
,它是一个”捕捉一切”的对象:对于获取add
的请求将会落到这里。
与属性@
绑定的对象是if
的副本:
它将获取 customer.country.eq
数据并将其转换为布尔数据,然后根据这个数据返回 9.99
或 24.99
中的一个。其中任意一个都有属性 add
,将用于构建一个新对象,带有参数 product.price
。结果将被 Dataized
Java 类使用以继续数据化的过程。最后,两个数字的和将被数据化为一个 Java 浮点数。
customer.country.eq
的数据化在运行时发生,无法在 EO 的层面上看到。对象 eq
被称为原子,因为它是语言的一个原子元素—它必须在 Java 中实现,而不是在 EO 中实现。以上示例中还有其他原子:if
、sprintf
、add
、stdout
和 length
。它们都是在 Java 中实现的。
因此,我们首先通过抽象(声明新的抽象对象)或通过应用(复制抽象对象)构建对象。接下来,我们对其中的一个对象进行数据化,整个对象组合开始”活动”,试图将自身转化为数据。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-22 at 09:52