Squeak Smalltalk,为什么有时减少的方法不起作用?

Sle*_*der 2 smalltalk squeak fractions

(2332 / 2332) reduced 
(2332 / 2) reduced 
(2332 / 322) reduced  (1166/161)
(2332 / 3) reduced  (2332/3)
(2332 / 2432423) reduced  (2332/2432423)
Run Code Online (Sandbox Code Playgroud)

看看上面的代码.打印时,第一个和第二个不起作用.弹出MessageNotUnderstood窗口.第3,第4,第5个代码没问题.结果出来了.

为什么这个reduced方法不起作用?

是因为简化方法无法处理像Uko猜测这样的整数的最终结果吗?

Ber*_*erg 5

在该/方法中自动减少分数.无需发送reduced消息.

例如,如果您打印结果

2 / 4
Run Code Online (Sandbox Code Playgroud)

你会(1/2)自动减少.

如果打印结果

2332 / 2332
Run Code Online (Sandbox Code Playgroud)

它被简化1不是 Fraction,而是Integer,而Integers不理解该reduced消息.这就是你得到错误的原因.

分数未自动缩小的唯一情况是手动创建时,如

Fraction numerator: 2 denominator: 4
Run Code Online (Sandbox Code Playgroud)

这将回答非减少(2/4).但在正常的算术表达式中,您永远不需要发送reduced.