- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我试图理解以下代码片段的行为。我特别关注 Fiber#transfer
方法。
require 'fiber'
fiber2 = nil
fiber1 = Fiber.new do
puts "In Fiber 1" # 3
fiber2.transfer # 4
end
fiber2 = Fiber.new do
puts "In Fiber 2" # 1
fiber1.transfer # 2
puts "In Fiber 2 again" # 5
Fiber.yield # 6
puts "Fiber 2 resumed" # 10
end
fiber3 = Fiber.new do
puts "In Fiber 3" # 8
end
fiber2.resume # 0
fiber3.resume # 7
fiber2.resume # 9
我在右边用预期的连续执行顺序对代码行进行了编号。一次fiber3.resume
返回,我调用 fiber2.resume
, 我希望执行在 fiber2
内继续在标记为 #10 的行。相反,我收到以下错误:
fiber2.rb:24:in `resume': cannot resume transferred Fiber (FiberError)
from fiber2.rb:24:in `<main>'
这是 list 最后一行报告的错误:fiber2.resume
.
最佳答案
似乎behavior has changed since Ruby 1.9 .虽然在 1.9 中,事情按照提问者假设的方式工作,但后来的 Ruby 版本改变了 #transfer
的工作方式。我在 2.4 上进行测试,但这可能适用于 2.* 系列中的早期版本。
在 1.9 中,#transfer
可用于在纤程之间来回跳转。有可能当时 #resume
不能用于此目的。无论如何,在 Ruby 2.4 中,您可以使用 #resume
从一根纤程跳转到另一根纤程,然后只需使用 Fiber.yield()
跳回到调用方.
示例(基于问题中的代码):
require 'fiber'
fiber2 = nil
fiber1 = Fiber.new do
puts "In Fiber 1" # 3
Fiber.yield # 4 (returns to fiber2)
end
fiber2 = Fiber.new do
puts "In Fiber 2" # 1
fiber1.resume # 2
puts "In Fiber 2 again" # 5
Fiber.yield # 6 (returns to main)
puts "Fiber 2 resumed" # 10
end
fiber3 = Fiber.new do
puts "In Fiber 3" # 8
end
fiber2.resume # 0
fiber3.resume # 7
fiber2.resume # 9
#transfer
的用例现在似乎是当你有两条光纤(我们称它们为 A 和 B)并且想要从 A 到 B,但你不打算来在 B 完成之前回到 A。然而,Ruby 没有尾调用优化的概念,所以 A 仍然必须等待 B 完成并产生它的最终值。尽管如此,#transfer
现在基本上是一张单程票。
关于 ruby 纤维 : resuming transferred fibers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199283/
我的几个 Android 应用程序在 logcat 输出中显示以下类型的消息: I/UsageStats( 59): Unexpected resume of com.totsp.test whi
因此,在“On Error GoTo 执行一次”下出现了几个 SO 问题和 Google 结果,几乎在每种情况下,推荐的解决方案都是添加 Err.Clear或者Resume的一些论坛清除错误。 VBA
我正在构建一个基于文本的 RPG,并且我已经成功地向我的程序添加了一些 .wav 文件,我也能够正常播放它们而没有问题任何一个。 目前发生了什么? 我有 2 个 .wav 文件,一个用于一般背景音乐
在那里, 我修改了 Lua 5.0 在线文档中的“perm”示例:http://www.lua.org/pil/9.3.html .我所做的是将 __call() 元方法重新指向 perm() 函数。
我意识到这是一个较旧的编程环境,但我必须清理一些 VB6代码,我发现它大部分使用: On Error Resume Next 使用On Error Resume Next的普遍共识是什么? ? 当然,
当我尝试恢复挂起(可恢复)编排实例时,出现以下错误。 场景:请求通过 DB2 静态请求 - 响应端口,但由于访问权限被拒绝而失败。我可以在管理控制台中看到两个暂停的实例,一个与端口相关,另一个与编排相
如何从最后上传的 block 中获取响应数据?我在任何地方都找不到它,我唯一发现的是您只能在错误时访问该消息 谢谢 最佳答案 找到了!如果您想从上传的文件中检索数据,您需要: r.on('fi
我无法建立exe: 1> ------ Assembly started: project: B, Configuration: Debug Any CPU B.vb (38.9): error BC
我在 aframe (ar.js) 中有一个 360° 旋转动画,我想暂停并继续它,而我所能做的就是暂停但从头开始重新开始。 Animation docum
我认为答案是否定的,但 Twilio 是否提供暂停/恢复录制的功能?用例正在录制通话,但在收集敏感信息时暂停录制。从 REST 文档来看,它似乎不是受支持的功能。认为有人可能已经找到了满足此要求的一些
我有一个包含 5 个模块的多模块 maven 项目。这些模块是分层的,因此一些依赖于构建的第一个(它是我的模型类),而一些依赖于构建的第二个(那些是核心应用程序类)。最后一个构建的是一个依赖于所有其他
如果我运行一个异步调用 onResume 是否有一个好的方法来检测异步调用是否正在运行以不再调用它? 因为我在 fragment 的 onResume 中使用 AsynTask 进行网络调用,它似乎被
如何向这个 javascript 倒数计时器添加恢复按钮? JS $(document).ready(function () { var $worked = $("#timer"); function
找不到明确的答案,基本上我有一个 EditText 字段的 Activity 。软键盘在 list 中设置为可见,因此当 Activity 开始时键盘是可见的,但是如果用户导航离开并使用后退按钮返回,
我正在看generators in Rust ,并决定试一试。我实现了我能找到的最基本的例子: #![feature(generators, generator_trait)] use std::op
我知道这之前已经发布过,但我是 swift 的新手,我想根据我的情况寻求帮助。所以我需要运行一个计时器,当 stopMusic() 被调用时(在我的应用程序中的某个地方),我需要暂停计时器,然后当 p
Android 中的共享首选项有问题 - 我希望能够将一些字符串(保存图片的 ID)作为下一次发布的最爱 - 它工作完美,它可以识别 ID 是否已经在共享首选项并在必要时将其删除,但是当我通过按下主页
我在我的 Node.js-express 应用程序中使用 Resumable.js。我可以知道文件传输成功了,因为我可以 console.log(req.body) 并在下面看到这个...... {
一年好景君须记,最是橙黄橘绿时。金三银四,秣马厉兵,没有一个好看的简历模板怎么行?无论是网上随便下载还是花钱买,都是一律千篇的老式模版,平平无奇,味同嚼蜡,没错,蜡都要沿着嘴角流下来了。本次我们基于
启用或禁用错误处理程序。 说明 如果在您的代码中未使用OnErrorResumeNext语句,所发生的运行时错误将显示错误信息,同时,代码的执行也随之终止。但是具体操作由运行代码的主机决定。主机
我是一名优秀的程序员,十分优秀!