Smalltalk中协程是如何实现的?

发布于 2024-11-17 23:11:09 字数 80 浏览 1 评论 0原文

我可以在smalltalk中实现协程吗?

如果你的答案是否定的:为什么不呢?

或者如果是的话:你能给我举个例子吗?

Can I implement coroutines in smalltalk?

If your answer is no: why not?

Or if its yes: can you give me an example?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

请爱~陌生人 2024-11-24 23:11:09

大多数 Smalltalk 在 thisContext 对象上都有堆栈操作方法。您可以使用它们来实现协程,尽管在此级别处理堆栈可能有点乏味。

GNU Smalltalk 以及最新版本的 Squeak 和 Pharo 还提供了一个 Generator 类,可以轻松编写生成器(即生成多个值的协程类型):

"This generator yield an infinite sequence of 1"
generator := Generator on: [ :gen | [ gen yield: 1 ] repeat ].

(1 to: 100) do: [:i | Transcript show: (generator next printString); cr]

Most Smalltalk have stack manipulation methods on the thisContext object. You could use these to implement coroutines though dealing with the stack at this level may prove a bit tedious.

GNU Smalltalk and recent versions of Squeak and Pharo also offer a Generator class that makes it easy to write generators (i.e. types of coroutine that yield multiple values):

"This generator yield an infinite sequence of 1"
generator := Generator on: [ :gen | [ gen yield: 1 ] repeat ].

(1 to: 100) do: [:i | Transcript show: (generator next printString); cr]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文