gpt4 book ai didi

iolanguage - Io : How to instantiate a subclassed primitive (e. g。数字)?

转载 作者:行者123 更新时间:2023-12-02 21:05:04 26 4
gpt4 key购买 nike

书中7 Languages in 7 Weeks有个问题:

How would you change / to return 0 if the denominator is zero?

感谢帖子What's the significance of self inside of a method?我有一个可行的解决方案,但我想尝试在不破坏 Number“/”方法的情况下实现它,而是子类 Number。这是我尝试过的:

Zeroable := Number clone
Zeroable / = method(denom, if(denom == 0, 0, self proto / denom))

但是,这不起作用。如果我尝试实例化 Zeroable 的实例,它的行为就像一个数字:

Io> ten := Zeroable 10
==> 10
Io> ten type
==> Number
Io> ten / 5
==> 2
Io> ten / 0
==> inf
Io> ten slotNames
==> list()

如果我以“正常”方式实例化 Zeroable,但该值始终为 0,并且似乎没有办法更改它:

Io> zero := Zeroable clone
==> 0
Io> zero type
==> Zeroable
Io> zero / 0
==> 0
Io> zero / 2
==> 0

我认为问题在于 ten 的实例化方式,但我无法弄清楚如何将“参数”传递给克隆方法,或者如何创建不为 0 的 Zeroable。这是怎么回事?

最佳答案

参数不能传递给克隆,克隆的有效设置如下:

clone := method(
obj := primitiveAllocateMemory(sizeof(self))
obj parent := self
obj do(?init)
)

其次,您不能像这样子类化Number。当词法分析器遇到文字数字并给定类型 Number 时,就会创建 Number 对象。该对象被设置为消息的缓存结果,这意味着,即使您拦截该消息并将其作为其他对象进行评估,您仍然会得到一个 Number。实际上,这是出于性能原因而进行的消息评估的短路。

如果您想要不同的数字类型,您必须自己使用所需的操作来实际实现它。这意味着子类化 Object(或其他一些对象)并实现您想要的所有行为。请注意,如果您对 Number 进行子类化,则 Number 上的方法的实现将无法理解您的子类(它如何存储其数字)。 Number 方法假定对象中编码的数值,而不是其槽表。

关于iolanguage - Io : How to instantiate a subclassed primitive (e. g。数字)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10909001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com