Squeak Smalltalk,为什么有时reduced方法不起作用?
Squeak Smalltalk, why sometimes the reduced method doesn't work?
(2332 / 2332) reduced
(2332 / 2) reduced
(2332 / 322) reduced (1166/161)
(2332 / 3) reduced (2332/3)
(2332 / 2432423) reduced (2332/2432423)
看看上面的代码。第一个和第二个在打印时不起作用。 MessageNotUnderstood window 弹出。而第3、4、5码都可以。结果出来了。
为什么 reduced
方法不起作用?
是不是因为reduced方法无法处理像Uko猜测的整数的最终结果?
/
方法会自动减少分数。无需发送 reduced
消息。
例如如果你打印
的结果
2 / 4
您会自动获得减少的 (1/2)
。
如果打印
的结果
2332 / 2332
它被简化为 1
,它 不是 一个分数,而是一个整数,而整数不理解 reduced
消息。这就是您收到错误的原因。
分数不会自动减少的唯一情况是您手动创建它,如
Fraction numerator: 2 denominator: 4
这将回答非缩减的(2/4)
。但是在普通的算术表达式中,你永远不需要发送 reduced
.
错误的发生是因为默认情况下,Integer
class 不理解 Squeak 中的消息 reduced
。 尽管 Squeak 的 Integer
class 成员是分数。
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 的设计者创造了一种语言,让程序员能够以他们思考问题的方式表达自己。
(2332 / 2332) reduced
(2332 / 2) reduced
(2332 / 322) reduced (1166/161)
(2332 / 3) reduced (2332/3)
(2332 / 2432423) reduced (2332/2432423)
看看上面的代码。第一个和第二个在打印时不起作用。 MessageNotUnderstood window 弹出。而第3、4、5码都可以。结果出来了。
为什么 reduced
方法不起作用?
是不是因为reduced方法无法处理像Uko猜测的整数的最终结果?
/
方法会自动减少分数。无需发送 reduced
消息。
例如如果你打印
的结果2 / 4
您会自动获得减少的 (1/2)
。
如果打印
的结果2332 / 2332
它被简化为 1
,它 不是 一个分数,而是一个整数,而整数不理解 reduced
消息。这就是您收到错误的原因。
分数不会自动减少的唯一情况是您手动创建它,如
Fraction numerator: 2 denominator: 4
这将回答非缩减的(2/4)
。但是在普通的算术表达式中,你永远不需要发送 reduced
.
错误的发生是因为默认情况下,Integer
class 不理解 Squeak 中的消息 reduced
。 尽管 Squeak 的 Integer
class 成员是分数。
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 的设计者创造了一种语言,让程序员能够以他们思考问题的方式表达自己。