我想将“Prompter prompt:aStringPrompt”中的输入值转换为整数值,我该怎么做?
答案 0 :(得分:5)
两个步骤:(a)验证输入,(b)转换。
您可以这样验证:myString isAllDigits
。
转换很简单:'1' asInteger
。至少在Squeak中,这会返回整数1. 'g1' asInteger
返回1,'g1' asInteger
也是如此。 g asInteger
返回nil。
总结如下:
"Given some input string s containing a decimal representation of a number, either return s in integer form, or raise an exception."
s := self getUserInput.
(s isAllDigits) ifFalse: [ Exception signal: '"', s, '" is not a (decimal) number' ].
^ s asInteger.
答案 1 :(得分:1)
刚在Dolphin 6中试过这个:
(Prompter prompt: 'Enter a number') asInteger
运行此命令(将光标置于工作区中的上方并按Ctrl-D),在出现的提示中输入123,您将看到123显示为输出。如果删除#asInteger调用,它将显示'123',表示返回了一个String。
至于你的'不理解#number',这意味着代码中的某个地方正在运行消息#number,因为它被发送到一个不知道如何处理它的对象。
为了好玩,我拿了你的代码并稍微重新格式化了:
| dir |
[ dir isNil or: [ dir isEmpty ] ] whileTrue:
[ dir:= Prompter prompt: 'Enter your number' caption: 'Input the Number' ].
MessageBox notify: 'your inputed number is ', (dir) caption: 'Inputed'.
发现它运行得很好。然后我注意到它没有将返回的String转换为数字,所以我把它改为:
| dir |
[ ( dir isNil or: [ dir isEmpty ] ) or: [ (dir select: [ :c | c isDigit not ]) size > 0 ] ] whileTrue:
[ dir:= Prompter prompt: 'Enter your number' caption: 'Input the Number' ].
MessageBox notify: 'your inputed number is ', (dir) caption: 'Inputed'.
这也运行良好,但附加的好处是它不接受非数字字符。
分享并享受。