繁体   English   中英

Smalltalk x raiseTo:y错误

[英]Smalltalk x raisedTo: y error

美好的一天! 我明天有报告,我正在审查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.

请尝试以下操作:

|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是动态类型的,但这并不意味着您可以将任何类型的对象传递给方法。

您的代码在x上执行#raisedTo:。 但是,x是一个字符串,而不是在其中实现#raisedTo:的Number的子类。 因此,您最初的错误是由String无法理解#raisedTo:引起的。 (您可以使用“工具”菜单下的“方法查找器”检查#raisedTo:在何处实现。)我通过将#asNumber发送给x来更正此问题。

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

最后,#inform:需要一个字符串,而不是一个数字。 此处的更正是将#asString发送给该号码。

请注意,#asString和#asNumber将如何更改将消息发送到的对象。 相反,将回答适当类型的新对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM