我发现此代码和示例执行存在一个非常奇怪的问题:https://gist.github.com/720278
两个文件中的数据相同,但由于某种原因,应用程序在第二个文件上失败。仅为此文件运行应用程序工作正常,只有在一次执行中处理多个文件时才会中断。例外并没有帮助我跟踪事情(抱怨map()s正常工作)。
我希望有人之前可能会看到这样的事情,并且可以指出我正确的方向。
答案 0 :(得分:2)
您的代码适用于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
此方法旨在通过使用line[0]
检查每行的第一个字符来将注释与数据分开。在Ruby 1.9中,这将第一个字符作为字符串返回。但是,在Ruby< 1.9中,这会将第一个字符作为整数返回。为了在旧版本的ruby中使用,请使用line[0..0]
代替line[0]
:
def split_comments!
@comments = @input_data.select { |line| line[0..0] == "#" }
parse_header_attributes
@input_data.delete_if { |line| line[0..0] == "#" }
end
您可能会发现使用正则表达式来测试评论更为简洁:line =~ /^#/
。方法Array#partition
也可以在这里发挥出色:
def split_comments!
@comments, @input_data = @input_data.partition do |line|
line =~ /^#/
end
parse_header_attributes
end
通过对git树的更新,它可以在没有错误的情况下运行,处理多个文件时以及连续运行两次。