gpt4 book ai didi

console-application - Smalltalk (Pharo) 如何简单地与用户交互

转载 作者:行者123 更新时间:2023-12-04 08:05:06 27 4
gpt4 key购买 nike

我偶然发现了 Smalltalk 并进一步下载了 Pharo,因为它被推荐。我的第一印象是非常积极的。我想移植一些我用 C++(我的主要语言)编写的简单程序,这样我就可以感受一下 Smalltalk。

但是,我意识到我找不到一种简单的方法来从用户那里获取一些输入,例如我想创建一个带有 REPL 循环的控制台计算器,但我在 Pharo 中找不到这样做的方法。我不想要带按钮的 gui,因为那太慢而且不方便。

有人可以向我指出如何在 Smalltalk 中做一些简单的事情,比如让用户输入 10 个数字或命令等?我必须使用不同的实现吗?我的目标是 std::cin/cout 或 python 的打印/输入

我知道 Transcript show: ,但这仅涵盖输出部分。

提前致谢!

最佳答案

从用户那里获取输入很容易,但模拟基于线路的控制台就没有那么多了。至少它会比依赖 GUI 更麻烦,毕竟它并不是那么慢和不方便。

最接近的输入等效于 Transcript show:将是:

UIManager default request: 'Title of the request'

如果您标记此代码段并“打印它”或“检查它”,您将看到一个提示对话框并可以在其中输入一些内容。当你用 OK 或 return 接受对话框时,你将返回输入的 String 作为 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 的操场(在大多数其他 Smalltalk 中称为工作区)已经做了 REPL 所做的事情,尽管它不限于基于行的输入。您可以键入 Smalltalk 表达式、计算它们并在那里打印结果。我知道这些信息不能让您体验从 C++ 移植计算器应用程序的经验。但是我想 I/O 的工作方式,或者更确切地说是与用户的交互,并不是您尝试移植的程序的本质,对吗?所以你不妨写一个类 Calculator ,在其中实现计算器应用程序,将字符串作为输入并返回结果数字,然后通过计算如下表达式从操场调用它:
Calculator new calculate: '3 + 4'

如果您真的,真的想坚持使用控制台内容,而错过了通常 Smalltalk IDE 的好处以及学习和使用它的经验,那么使用 GNU Smalltalk 可能会更好。我认为也有使用 Pharo 创建控制台应用程序的方法,但我不会向 Smalltalk 新手推荐这种方法,我会将这个答案留给已经做过一次的人。

关于console-application - Smalltalk (Pharo) 如何简单地与用户交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com