Squeak Smalltalk:为什么在inspect窗口中修改分子和分母值后,分数不会减少?

Squeak Smalltalk:为什么在inspect窗口中修改分子和分母值后,分数不会减少?,smalltalk,squeak,Smalltalk,Squeak,a是一个分配了分数12/24的变量1/2是打印时的答案。现在打开inspect弹出窗口,更改分子和分母的值,并猜测答案与之前相同,1/2。真正发生的是输出保持在12/24,这对我来说有点奇怪 我录制了一段视频来帮助理解这个问题 为什么在“检查”窗口中修改分子和分母值后,分数不会减少???我的答案是基于法罗方言的,我相信“吱吱声”并没有太大的不同。 因为你在第一次除以整数。 有来自Integer的代码片段>>/ a := 12 / 24. 注意调用reduce方法 如果在Inspector工具

a是一个分配了分数
12/24
的变量<代码>1/2是打印时的答案。现在打开inspect弹出窗口,更改分子和分母的值,并猜测答案与之前相同,
1/2
。真正发生的是输出保持在
12/24
,这对我来说有点奇怪

我录制了一段视频来帮助理解这个问题


为什么在“检查”窗口中修改分子和分母值后,分数不会减少???

我的答案是基于法罗方言的,我相信“吱吱声”并没有太大的不同。 因为你在第一次除以整数。 有来自Integer的代码片段>>/

a := 12 / 24.
注意调用reduce方法


如果在Inspector工具中更改分母/命名器后调用reduce方法,分数对象也将被减少。

您描述的行为是正确的,并且是预期的行为

作为开发人员,您可以通过两种方式修改对象:

  • 向他们发送消息
  • 从检查器修改其实例变量
  • 方法1是首选的,因为它符合范例。那么,为什么我们有方法2呢?因为当你打开一个检查器时,你以某种方式模拟了这个对象。换句话说,你成为被检查的对象,因此你有权修改自己

    当然,如果你修改了你的内部状态,你就有权保留你的不变量。对于分数,有两个不变量:

  • 分母>0
  • (分子gcd:分母)=1
  • 总之,检查器将假定您知道自己在做什么,并允许您以所需的方式修改所有实例变量。但是,在发送消息时,对象的行为应该保持其不变量


    当然,有一些私有方法应该小心处理(即,只能通过公共方法发送),但一般的想法是,直接操纵对象是一件好事,没有任何障碍或保护措施

    您好,请尝试描述您的问题,不要让人们访问youtube。您如何尝试更改这些值?您是否应用更改?“回答”是什么意思?你的意思是
    成绩单秀:a
    还是类似的?您是否尝试过调试,即逐步检查对象的打印方法?请参阅Bert Freudenberg的答案,该答案回答了为什么在手动创建分子和分母时分数减少不会自动发生。但仍然不知道为什么。
    (Fraction numerator: self denominator: aNumber) reduced