美好的一天!我明天有报告,我正在审查Smalltalk.我试图使用该raisedTo:方法,但它给了我这个错误:
MessageNotUnderstood: Character>>raisedTo:
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
|x y z|
x := UIManager default request: 'P1: '.
y := UIManager default request: 'P2: '.
z := x raisedTo: y.
self inform: z.
Run Code Online (Sandbox Code Playgroud)
请尝试以下方法:
|x y z|
x := UIManager default request: 'P1: '.
y := UIManager default request: 'P2: '.
z := x asNumber raisedTo: y asNumber.
self inform: z asString.
Run Code Online (Sandbox Code Playgroud)
注意选择器#asNumber和#asString如何将对象转换为正确的类型.
Smalltalk是动态类型的,但这并不意味着您可以将任何类型的对象传递给方法.
您的代码执行#raisedTo:on x.但是,x是一个String,而不是Number的子类,其中实现了#raisedTo :. 所以你的初始错误是由String不理解#raisedTo:引起的.(您可以使用"工具"菜单下的"方法查找器"来检查#raisedTo:的实现位置.)我通过将#asNumber发送到x来更正此问题.
同样,您发送给#raisedTo的参数也必须是数字.这里的修正是一样的; 将#asNumber发送给y.
最后,#inform:需要一个String,而不是一个数字.这里的更正是将#asString发送给该号码.
请注意#asString和#asNumber如何不更改发送消息的对象.而是回答适当类型的新对象.