- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
书中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/
我是一名优秀的程序员,十分优秀!