строка в integer в smalltalk - PullRequest
       13

строка в integer в smalltalk

3 голосов
/ 30 августа 2010

Я хочу преобразовать входное значение в «Prompter prompt: aStringPrompt» в целочисленное значение, как я могу это сделать?

Ответы [ 2 ]

5 голосов
/ 30 августа 2010

Два шага: (а) проверить ввод и (б) преобразовать.

Вы можете подтвердить это так: myString isAllDigits.

Преобразование тривиально: '1' asInteger. По крайней мере в Squeak это возвращает целое число 1. 'g1' asInteger возвращает 1, как и 'g1' asInteger g asInteger возвращает ноль.

Итак, в итоге:

"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 голос
/ 18 сентября 2010

Только что попробовал это в Dolphin 6:

(Prompter prompt: 'Enter a number') asInteger

Запустите это (поместите курсор на вышеуказанное в рабочей области и нажмите Ctrl-D), введите 123 в появившейся подсказке, и вы увидите 123, отображаемое в качестве вывода. Если вы удалите вызов #asInteger, он будет отображать «123», указывая, что возвращена строка.

Что касается вашего «не понимает #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'.

и обнаружил, что все работает нормально. Затем я заметил, что он не преобразовал возвращаемую строку в число, поэтому я изменил ее на:

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

Это также прошло нормально, с дополнительным преимуществом, что он не будет принимать нечисловые символы.

Делись и наслаждайся.

...