我正在尝试使用 Ruby 的 Fibers 创建一个 REPL,其中一根 Fiber 作为前端 - 接收输入并显示输出 - 一根 Fiber 作为后端 - 处理来自前端的输入并返回输出以供显示。
(我这样做部分是因为我隐约需要一个 REPL,部分是因为我想了解 Fibers,部分是因为我认为这将允许测试 - 只需替换测试框架中的前端来测试后端,反之亦然) .
麻烦的是,我找不到任何关于如何实际使用完整的 Fibers 库的好的文档,而且我最初的猜测是行不通的。所以,我有四个问题:
- 这是一个半明智的想法吗?尝试从 Fibers 制作 REPL 时我会遇到巨大的麻烦吗?
- 如果没有 Fibers 库,我认为我无法做到这一点,因为我需要双向传递值。那正确吗?
- 任何人都可以指出关于 Ruby Fibers 的体面的、入门的教程或文档(如在库中,而不是单向生成器的东西)?
- 为什么以下不起作用?正确显示
Enter a string:
,并反复接受输入;但每次我提供一行输入时,它只会显示第一行输入反转(包括示例输出,以防不清楚)。
代码:
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
: