Получение информации от пользователя легко, но эмуляция линейной консоли не так уж и велика.По крайней мере, это было бы более громоздко, чем полагаться на графический интерфейс, который на самом деле не такой медленный и неудобный.
Ближайший входной эквивалент, эквивалентный Transcript show:
, будет:
UIManager default request: 'Title of the request'
Если вы отметите этот фрагмент и «напечатаете его» или «осмотрите его», вы увидите диалоговое окно с подсказкой и сможете ввести в него что-нибудь.Когда вы принимаете диалог с помощью OK или возврата, вы получите введенную строку в качестве возвращаемого значения request:
.
Получение десяти чисел может быть сделано следующим образом:
(1 to: 10) collect: [:each | (UIManager default request: 'Enter number ', each asString) asNumber ]
Результатом будет массив введенных чисел.
Или без использования collect:
и самостоятельного создания коллекции:
numbers := OrderedCollection new.
10 timesRepeat:
[ numbers add: (UIManager default request: 'Enter next number') asNumber ].
numbers do: [:each | Transcript show: each ].
Вам также может понравиться UIManager default chooseFrom:
.Просмотрите класс UIManager и попробуйте различные методы.
Обратите внимание, что игровая площадка Pharo (называемая рабочей областью в большинстве других Smalltalks) уже делает то, что делает REPL, хотя она не ограничивается вводом на основе строк.Вы можете набирать выражения Smalltalk, оценивать их и распечатывать результаты там.Мне известно, что эта информация не дает вам опыта переноса приложения калькулятора из C ++.Но я предполагаю, что то, как работает ввод-вывод или, скорее, взаимодействие с пользователем, не является сущностью программ, которые вы пытаетесь портировать, верно?Таким образом, вы могли бы также написать класс Calculator
, в котором вы реализуете свое приложение калькулятора, беря строку в качестве входных данных и возвращая полученное число, а затем вызываете его из игровой площадки, вычисляя выражение, подобное следующему:
Calculator new calculate: '3 + 4'
Если вы действительно, действительно хотите придерживаться консольного материала и упустить преимущества обычной среды разработки Smalltalk и опыта изучения и использования, вам может быть лучше с GNU Smalltalk.Я думаю, что есть способы создания консольных приложений с помощью Pharo, но я бы не советовал это новичкам в Smalltalk, и я оставлю этот ответ кому-то, кто уже сделал это однажды.