Smalltalk x raiseTo:y错误

时间:2014-11-25 13:15:08

标签: smalltalk squeak

美好的一天!我明天有报告,我正在审查Smalltalk。我尝试使用raisedTo:方法,但它给了我这个错误:

 MessageNotUnderstood: Character>>raisedTo:

这是我的代码:

|x y z|
x := UIManager default request: 'P1: '.
y := UIManager default request: 'P2: '.
z := x raisedTo: y.
self inform: z.

1 个答案:

答案 0 :(得分:5)

尝试以下方法:

|x y z|
x := UIManager default request: 'P1: '.
y := UIManager default request: 'P2: '.
z := x asNumber raisedTo: y asNumber.
self inform: z asString.

注意选择器#asNumber和#asString如何将对象转换为正确的类型。

Smalltalk是动态类型的,但这并不意味着您可以将任何类型的对象传递给方法。

您的代码执行#raisedTo:on x。但是,x是一个String,而不是Number的子类,其中实现了#raisedTo :.所以你的初始错误是由String不理解#raisedTo:引起的。 (您可以使用“工具”菜单下的“方法查找器”来检查#raisedTo:的实现位置。)我通过将#asNumber发送到x来更正此问题。

同样,您发送给#raisedTo的参数:也必须是数字。这里的修正是一样的;将#asNumber发送给y。

最后,#inform:需要一个String,而不是一个数字。这里的更正是将#asString发送到该号码。

请注意#asString和#asNumber 不会更改您发送邮件的对象。而是回答适当类型的新对象。