Ruby,如何访问 do-end 循环之外的局部变量

2023-11-24

我有一个循环,在远程计算机上执行一系列命令:


   ssh.exec('cd /vmfs/volumes/4c6d95d2-b1923d5d-4dd7-f4ce46baaadc/ghettoVCB;  ./ghettoVCB.sh -f vms_to_backup -d dryrun') do|ch, stream, data|
                                    if #{stream} =~ /vmupgrade/
                                    puts value_hosts + " is " + data
                                    puts #{stream}
                                    puts data
                                    end
                            end

我想访问 #{stream} 和 do-end 循环之外的数据

我将不胜感激任何帮助。 谢谢,

Hi Jörg,

我实施了您的建议,但现在出现错误:


WrapperghettoVCB.rb:49: odd number list for Hash
      communicator = {ch: ch, stream: stream, data: data}
                         ^
WrapperghettoVCB.rb:49: syntax error, unexpected ':', expecting '}'
      communicator = {ch: ch, stream: stream, data: data}
                         ^
WrapperghettoVCB.rb:49: syntax error, unexpected ':', expecting '='
      communicator = {ch: ch, stream: stream, data: data}
                                     ^
WrapperghettoVCB.rb:49: syntax error, unexpected ':', expecting '='
      communicator = {ch: ch, stream: stream, data: data}
                                                   ^
WrapperghettoVCB.rb:76: syntax error, unexpected kELSE, expecting kEND
WrapperghettoVCB.rb:80: syntax error, unexpected '}', expecting kEND

你不能。局部变量是其作用域的局部变量。这就是为什么他们被称为局部变量.

但是,您可以使用外部作用域中的变量:

communicator = nil

ssh.exec('...') do |ch, stream, data|
  break unless stream =~ /vmupgrade/
  puts "#{value_hosts} is #{data}", stream, data
  communicator = {ch: ch, stream: stream, data: data}
end

puts communicator

顺便说一句:您的代码中有几个错误,这会阻止它工作anyway无论变量作用域存在问题,因为您使用了错误的语法来取消引用局部变量:取消引用变量的语法只是变量的名称,例如foo, 并不是#{foo}(这只是一个语法错误)。

此外,还有一些其他改进:

  • 格式化:Ruby 中缩进的标准是 2 个空格,而不是 26 个
  • 格式化:Ruby中缩进的标准是2个空格,而不是0
  • 格式化:通常,块参数与do带空格的关键字
  • 保护条款: 如果你把entire条件中的块或方法的主体,您可以将其替换为块的开头的守卫,如果条件为真,则跳过整个块
  • 字符串插值:将字符串添加到一起+在 Ruby 中是不寻常的;if你需要连接字符串,通常用<<,但通常情况下,首选字符串插值
  • 多个参数puts:如果您将多个参数传递给puts,它会将所有内容打印在单独的行上,您不需要多次调用它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby,如何访问 do-end 循环之外的局部变量 的相关文章

  • 在 Ruby/Sinatra 中解码 Facebook 的签名请求

    由于 Facebook 不赞成使用新的 FBML 我正在寻找一种新方法来创建 显示 选项卡 向粉丝显示一个版本 向非粉丝显示另一个版本的页面选项卡 Facebook 已将数据添加到signed request 中 当用户在应用程序中选择您的
  • Riod-iOS 错误:您没有写入权限“Gem::FilePermissionError”

    我已经下载了一个Riot iOS https github com vector im riot ios并遵循构建说明 当我跑步时 捆绑安装 回溯 最近一次调用 2 来自 usr bin bundle 23 in
  • Groovy 中的显式输入:有时还是从不?

    后来 仍然无法弄清楚 Groovy 是否具有静态类型 似乎没有 或者使用显式类型生成的字节码是否不同 似乎是 无论如何 回答这个问题 One of the main differences between Groovy and other
  • ActiveRecord oracle_enhanced 适配器无法加载 ruby​​-oci8 库

    rails g scaffold失败 但 oci 脚本和 irb 数据查询有效 无法弄清楚出了什么问题 rails g scaffold table field1 integer field2 string invoke active re
  • Ruby 的 OpenSSL::Random 种子是否足够?

    我对 Ruby 知之甚少 所以如果答案很明显 请原谅我 我注意到在http www ruby doc org stdlib 1 9 3 libdoc securerandom rdoc SecureRandom html http www
  • 在 debian Squeeze 上安装 RoR

    有什么方法可以在我的 debian squeeze 上安装 Ruby 1 9 2 或 1 8 7 Rails 3 吗 您可能不想在生产计算机上使用 RVM 它的 PATH 魔力会在不明显的地方 例如 cron 作业 被破坏 然后你就会陷入困
  • 从 ActiveRecord 获取表名

    I used ActiveRecord Base set table name在动态创建的 ActiveRecord 类上设置我的表名称 现在我需要知道稍后如何获得该值 api 文档没有提及如何执行此操作 另外 我无法从 ActiveRec
  • Ruby 代码到 JAR

    我希望能够将 ruby 程序编译为 java JAR 程序 我研究过 JRuby 看到了几个能够 eval ruby 代码的 Java 应用程序示例 但是是否有更优雅的解决方案允许简单地用 ruby 编写所有内容 然后将其直接编译为 JAR
  • 在 Rails 4 中渲染部分/rake 任务/后台作业/模型中的视图

    我读过很多关于在 rake 任务 后台作业 模型中渲染 Rails 部分和视图的内容 我在 Stackoverflow 和网络上找到的绝大多数内容都描述了在 Rails 3 中工作的方法 但它们似乎已经过时了 而且我没有让它们工作 即使花了
  • 在新的 RHEL6 服务器上安装 ruby​​-filemagic gem 时遇到困难

    它似乎正在寻找 libmagic so 1 文件 我有那个文件 它位于 usr lib64 中 我没有以 root 用户身份运行此安装 我也在使用 rvm 和 Bundler 这是我的 bundle 命令的结果 当它到达 Gemfile 中
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • gem install rmagick 在 OS X El Capitan 上失败

    几天前我升级到 El Capitan 并运行了 brew update brew upgrade 它更新了 imagemagick 导致 ruby 的 rmagick gem 停止工作 我想没问题 我就跑 gem install rmagi
  • 无需别名的 Ruby YAML 编写

    我正在从 ruby 将数据写入 yaml 文件 并且经常在该文件上添加别名 像 id001 somekey somevalue id001 就我而言 我使用 yaml 文件来aid可读性并将名称添加到文件中的值 因为现有数据只是 没有键的分
  • ruby 的 String .hash 方法如何工作?

    我只是红宝石的新手 我见过一个字符串方法 String hash 例如 在irb 我试过了 gt gt mgpyone hash returns gt 144611910 这个方法是如何工作的 The hash方法是为所有对象定义的 看文档
  • 带有附加参数的redirect_to

    我是一个菜鸟 redirect to users url notice Succeed p p 然后我添加一个message它失败了 redirect to users url notice Succeed message test p p
  • 如何编写一个在安装 RubyGem 时调用的钩子?

    我想编写一个 Ruby 片段 当我的 Gem 首次安装时运行 sudo gem install mygem 能做到吗 看起来并没有真正支持 我发现了一个 post install message 属性 您应该能够在 gem 规范中设置该属性
  • 如何在 gem 的示例脚本中使用 pry-byebug ?

    我正在制作我的第一个 gem 它不是 Rails 应用程序 而是一个带有一些 AI 的 tic tac toe 库 这样我就可以与一个永远不会输的计算机对手比赛 并在可能的情况下强行获胜 现在我正在尝试调试人工智能中的攻击策略 但我似乎无法
  • 什么是 - 获取的是一个目录 - 错误消息

    我收到这个奇怪的错误 Users gideon Documents ca ruby rubytactoe lib player rb 13 in gets Is a directory spec Errno EISDIR 玩家规格 rb r
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • 有没有可以在 HTML 文档之间进行比较的 ruby​​ gem?

    事实证明 对两个不同的 html 文档进行比较是一个完全不同的问题 而不仅仅是对纯文本进行比较 例如 如果我在以下之间进行简单的 LCS 差异 Google and Google diff 结果不是 but a gt github com

随机推荐

  • 我可以用 malloc 和隐式转换替换对 open_memstream 的调用吗?

    All 我有一个打印到流的程序 我需要在内存中缓冲该流 然后根据需要将每一行打印到实际文件中 自从fprintf 函数调用必须有一个FILE 指针 我需要说的是内存中的指针寻址空间 我曾经用过open memstream 函数 但 Wind
  • 将查询参数与 cfscript 查询一起使用时出错

    这是我的代码 var qryStr UPDATE templates email SET title title test emails testEmail body body WHERE id templateID q New Query
  • jQuery - 链接自定义函数

    我想知道如何链接我的自定义函数并维护 this 的上下文 Example fn foo function var html div class foo div if this hasClass somthing this prepend h
  • NPM Workspaces monorepo - 以 root 身份共享本地包的分发文件夹,而不是整个源文件

    使用 NPM 工作区 我共享一个包 components 和其他人 webapp1 and webapp2 像这样的东西 root apps webapp1 webapp2 packages components 一切都运转良好 但里面的一
  • gcc 可以使我的代码并行吗?

    我想知道 gcc 中是否有优化可以使一些单线程代码 如下面的示例 并行执行 如果没有 为什么 如果是 可以进行哪些优化 include
  • 如何通过关键字在 GIT 存储库中找到无法访问的提交哈希?

    我对 GIT 的情况有点困惑 我正在开发一个 GIT 版本化项目 我刚刚注意到我们认为几周前已经在主分支上的一些提交实际上丢失了 我记得这些提交是由其他人在功能分支 feature something 上推送的 该分支已不存在 我试图找到那
  • 如何使用 spring-kafka 暂停和恢复 @KafkaListener

    我已经实现了 Kafka 消费者 现在我有了一个场景 通过Spring Boot从Kafka流中读取数据2 2 5 Release 加载数据库表1 将表1的数据复制到表2 清空表格1 要执行上述操作 我需要使用使用quartz的调度作业 已
  • php 帖子的最大大小?

    难道POST请求有大小限制吗 我有一个大程序 我想缓存其输出 基本上 我想在缓存中存储一 个重要的 html 表 因为特定项目的增长 查询数量以及响应时间变得失控 现在我正在发送由 ajax 调用检索的大输出 在另一个 ajax 调用中 第
  • 如何在 REST 中实现粗粒度乐观锁?

    我已经为 REST 资源实现了乐观锁定 这些资源通过将 GET 中的版本号传回 PUT 调用 与数据库表进行一对一映射 如果在执行 GET 和 PUT 之间数据库中的版本号发生变化 则发生乐观锁异常 非常简单的设计 现在 如何对映射到多个数
  • C++11 可重入类锁定策略

    我有一个使用的界面pimpl习语 但是接口需要是可重入的 然而 调用线程不需要知道锁定 这是由四部分组成的问题和一部分无端设计的 C 11 示例 包含示例是为了解决我遇到过的几个类似常见问题解答的问题 locking pimpl rvalu
  • 曼哈顿距离 A*

    我正在使用 A 搜索算法并使用曼哈顿距离作为启发式来实现 NxN 谜题求解器 我遇到了一个好奇的问题bug 我无法理解 考虑这些谜题 0 元素是空白 最初的 1 0 2 7 5 4 8 6 3 goal 1 2 3 4 5 6 7 8 0
  • 获取等于目标的数组项的总和(子集总和)

    我需要获得等于目标的数组项的总和 如果数组项的总和不等于目标 我想获得小于目标的最高总和 这是一个例子 Input 4 6 8 12 4 6 6 12 4 4 4 Results 12 12 8 4 6 6 4 4 4 6 4 Note 数
  • 如何根据字段的子字符串值连接两个表?

    我遇到了 sql 问题 我想加入两个表 员工和班级讲师 条件是员工的 unid 列如 u0871457 而班级讲师的 EmplId 为 00871457 我只想将 EmplId 的第一个字符替换为 u 来连接以匹配来自 unid 的字符串
  • LSF - 获取已提交作业的 ID

    假设我使用类似的东西提交了一份工作bsub pwd 现在我想获取该作业的作业 ID 以便为下一个作业建立依赖关系 有什么方法可以让 bsub 返回作业 ID 吗 Nils 和 Andrey 分别在 shell 和 C C 环境中找到了这个具
  • 为 Fancybox 添加缩放功能

    我正在使用 Fancybox 作为我的缩略图库 我想使用 JQZoom http www mind projects it projects jqzoom 还有 fancybox 最终结果 1 用户点击缩略图 2 fancybox出现更大的
  • 使用 msbuild 指定解决方案的项目文件

    我想要使 用 msbuild 构建解决方案的特定项目的命令行 就像我们使用 devenv com 一样 在 devenv com 中 我们可以使用以下命令行指定解决方案的项目 devenv com Build Release x86 tes
  • 按字母顺序排列 CSS 属性是否有速度优势?

    我希望这个问题不要太奇怪和武断 当我使用 Firebug 查看一些 CSS 时 我注意到每个标签的 CSS 属性都是按字母顺序排列的 它是想告诉我们什么吗 除了能够更快地找到所需属性的明显好处之外 我想知道 如果属性在原始样式表中按字母顺序
  • 为什么在传递 std::ofstream 作为参数时要使用“使用已删除”函数? [复制]

    这个问题在这里已经有答案了 我有一个会员是std ofstream fBinaryFile and a void setFile std ofstream pBinaryFile fBinaryFile pBinaryFile output
  • 如何从 Pandas 的 OLS 摘要中提取特定值?

    是否有可能从 pandas 的线性回归摘要中获取其他值 目前我只知道一种获取 beta 和截距的方法 我需要得到 R 平方 这是手册的摘录 In 244 model ols y rets AAPL x rets ix GOOG In 245
  • Ruby,如何访问 do-end 循环之外的局部变量

    我有一个循环 在远程计算机上执行一系列命令 ssh exec cd vmfs volumes 4c6d95d2 b1923d5d 4dd7 f4ce46baaadc ghettoVCB ghettoVCB sh f vms to backu