smalltalk中的字符串到整数

时间:2010-08-30 07:00:30

标签: smalltalk

我想将“Prompter prompt:aStringPrompt”中的输入值转换为整数值,我该怎么做?

2 个答案:

答案 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'.

这也运行良好,但附加的好处是它不接受非数字字符。

分享并享受。