Ruby中明显的全局范围泄漏

Ruby中明显的全局范围泄漏,ruby,Ruby,我发现这段代码和示例执行存在一个非常奇怪的问题: 两个文件中的数据相同,但由于某种原因,应用程序在第二个文件中失败。仅为此文件运行应用程序效果良好,仅在一次执行中处理多个文件时才会中断。这些异常根本帮不上我的忙(抱怨map()正常工作) 我希望有人以前见过类似的东西,并能为我指出正确的方向。您的代码在MRI 1.9中有效,但在MRI 1.8.7中无效。在本例中,问题在于字符串订阅的工作方式不同 def split_comments! @comments = @input_data.selec

我发现这段代码和示例执行存在一个非常奇怪的问题:

两个文件中的数据相同,但由于某种原因,应用程序在第二个文件中失败。仅为此文件运行应用程序效果良好,仅在一次执行中处理多个文件时才会中断。这些异常根本帮不上我的忙(抱怨map()正常工作)


我希望有人以前见过类似的东西,并能为我指出正确的方向。

您的代码在MRI 1.9中有效,但在MRI 1.8.7中无效。在本例中,问题在于字符串订阅的工作方式不同

def split_comments!
  @comments = @input_data.select { |line| line[0] == "#" }
  parse_header_attributes
  @input_data.delete_if { |line| line[0] == "#" }
end

此方法旨在通过使用
行[0]
检查每行的第一个字符,将注释与数据分开。在Ruby1.9中,这将以字符串形式返回第一个字符。在Ruby中,我得到了一个不同的错误,在第49行,“不能将nil转换为Float(TypeError)”&wdebeum,你们每个人使用的Ruby版本是什么?我尝试了JRuby 1.5.2和MRI 1.8.7,得到了相同的错误(尽管MRI报告它来自
log10
和JRuby来自
convert\u fluxes\u to\u magnities!
).我认为
行[0,1]
优于
行[0..0]
,因为它不需要创建范围。我当然经常看到它。@Chuck,除非已知代码太慢,否则应该选择对人类更有利的代码。我会投票支持regexp并放弃下标。我以前从未遇到过分区,这非常有用,谢谢:)@Wayne Conrad:我看不出这两种方法对人类有什么特别的好处。两者的复杂性大致相当,两者都不比另一种更令人惊讶,也都不知道能预防牙龈疾病。我能想到的唯一可能的“人类”论点是,
[0,1]
形式在我所见过的代码中更为常见,因此更容易为人所熟悉。但是,呃,我不认为这有什么大区别。@Chuck,我同意。有很多方法可以剥这只猫的皮。
def split_comments!
  @comments = @input_data.select { |line| line[0..0] == "#" }
  parse_header_attributes
  @input_data.delete_if { |line| line[0..0] == "#" }
end
def split_comments!
  @comments, @input_data = @input_data.partition do |line|
    line =~ /^#/
  end
  parse_header_attributes
end