Ваш код работает в 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, используйте <code>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-дереве он запускается для меня без ошибок, при обработке нескольких файлов и при выполнении дважды подряд.