(2332 / 2332) reduced
(2332 / 2) reduced
(2332 / 322) reduced (1166/161)
(2332 / 3) reduced (2332/3)
(2332 / 2432423) reduced (2332/2432423)
看看上面的代码。打印时,第一个和第二个不起作用。弹出MessageNotUnderstood窗口。第3,第4,第5个代码没问题。结果出来了。
为什么reduced
方法不起作用?
是因为简化方法无法处理最终结果,如Uko猜测的整数?
答案 0 :(得分:-1)
发生错误是因为默认情况下,Integer
类无法理解Squeak中的消息reduced
。 尽管Squeak Integer
类的成员是分数。
5 isFraction "returns True"
关于Smalltalk的精彩之处在于,如果某些东西不能按你想要的方式工作,你就可以改变它。因此,如果Integer
没有响应消息reduced
并且您想要它,那么您可以将reduced
方法添加到Integer
并具有预期的行为:
reduced
"treat an integer like a fraction"
^ self
向类添加方法是Smalltalk可以轻松编写富有表现力的程序。例如,GNU Smalltalk中的Fractions
了解消息reduce
,但不了解Squeak中可用的消息reduced
。程序员可以简单地将reduced
提供给GNU Smalltalk中的分数,而不是试图记住无意义的差异:
Fraction extend [
"I am a synonym for reduce"
reduced [
^ self reduce
]
]
同样,可以在Squeak中扩展Fraction
以使用reduce
方法:
reduce
"I am a synonym for reduced"
^ self reduced
Smalltalk的设计师制作了一种语言,让程序员以他们思考问题的方式表达自己。