【发布时间】:2013-10-10 07:06:27
【问题描述】:
我正在尝试使用 Ruby 的 Fibers 创建一个 REPL,其中一根 Fiber 作为前端——接收输入并显示输出——另一根 Fiber 作为后端——处理来自前端的输入并返回输出以供显示。
(我这样做部分是因为我隐约需要一个 REPL,部分是因为我想了解 Fibers,部分是因为我认为这将允许测试 - 只需替换测试框架中的前端来测试后端,反之亦然- 反之)。
麻烦的是,我找不到任何关于如何实际使用完整 Fibers 库的好的文档,而且我最初的猜测是行不通的。所以,我有四个问题:
- 这是一个半途而废的想法吗?尝试从 Fibers 制作 REPL 会遇到很大的麻烦吗?
- 如果没有 Fibers 库,我认为我无法做到这一点,因为我需要双向传递值。对吗?
- 谁能给我指点关于 Ruby Fibers 的体面的入门教程或文档(如在库中,而不是单向生成器的东西)?
- 为什么以下操作不起作用?正确显示
Enter a string:,并反复接受输入;但每次我提供一行输入时,它只会显示 first 行输入反转(包括示例输出,以防不清楚)。
代码:
require 'fiber'
# Simple REPL. Echo back the user's input, reversed, until they
# enter "pots" (resulting in "stop")
frontend = Fiber.new do |backend, output|
while output != 'stop' do
puts output
print ": "
input = gets
output = backend.transfer(frontend, input)
end
end
backend = Fiber.new do |frontend, input|
loop do
frontend.transfer(input.reverse)
end
end
frontend.transfer(backend, "Enter a string:")
输出:
Enter a string:
: Hello
olleH
: World
olleH
:
【问题讨论】:
标签: ruby read-eval-print-loop fibers