Ruby在while循环期间会忘记局部变量?
发布时间:2020-12-16 20:21:34 所属栏目:百科 来源:网络整理
导读:我正在处理一个基于记录的文本文件:所以我正在寻找一个构成记录开始的起始字符串:没有记录结束标记,所以我使用下一个记录的开始来定义最后记录. 所以我已经建立了一个简单的程序来做到这一点,但是我看到一些令我震惊的东西:看起来Ruby正在忘记局部变量存
我正在处理一个基于记录的文本文件:所以我正在寻找一个构成记录开始的起始字符串:没有记录结束标记,所以我使用下一个记录的开始来定义最后记录.
所以我已经建立了一个简单的程序来做到这一点,但是我看到一些令我震惊的东西:看起来Ruby正在忘记局部变量存在 – 或者我发现编程错误? [虽然我不认为我有:如果我在我的循环之前定义变量’message’,我看不到错误]. 这是一个简化的示例,其中包含注释中的输入数据和错误消息: flag=false # message=nil # this is will prevent the issue. while line=gets do if line =~/hello/ then if flag==true then puts "#{message}" end message=StringIO.new(line); puts message flag=true else message << line end end # Input File example: # hello this is a record # this is also part of the same record # hello this is a new record # this is still record 2 # hello this is record 3 etc etc # # Error when running: [nb,first iteration is fine] # <StringIO:0x2e845ac> # hello # test.rb:5: undefined local variable or method `message' for main:Object (NameError) # 解决方法
我认为这是因为在循环中定义消息.在循环结束循环“消息”超出范围.在循环之外定义“消息”会在每个循环迭代结束时停止变量超出范围.所以我认为你有正确的答案.
您可以在每次循环迭代开始时输出消息的值,以测试我的建议是否正确. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – 与Azure同步时如何不违反此主键?
- 我可以从?/ Library/Developer/Xcode文件夹中删除什么?
- postgresql – 使用psql命令远程连接到Postgres实例
- 在C#中有一个Java等效于空合并运算符(??)吗?
- 什么是Flash .SWC文件,它是如何使用的?
- ruby-on-rails – ActiveRecord默认索引
- C#设置Word文档背景的三种方法(纯色/渐变/图片背景)
- c# – 使用不同大小的像素着色器采样器创建WPF效果
- 核心交换机(三层交换)和二层交换之间的端口聚合
- ruby-on-rails – 如何在ruby on rails上避免数据库中的重复