Ваша проблема - отсутствие return
def is_numeric?(obj)
if /[^0-9]/.match(obj) == nil
true
end
false
end
Эта функция ВСЕГДА возвращает false.Нет случая, чтобы он когда-либо возвращал истину.Ruby-функции всегда возвращаются с явным return()
, и если ни одна из них не вызывается, возвращается последняя строка.Это значит, что true
у вас там ничего не делает.Он просто отбрасывается и возвращается false
.
Упрощенная форма этой существующей функции просто:
def is_numeric?(obj)
false
end
Чтобы исправить эту проблему, вам нужно return
, когда она истинна:
def is_numeric?(obj)
if /[^0-9]/.match(obj) == nil
return(true)
end
false
end
Вы также можете упростить это до:
def is_numeric?(obj)
/[^0-9]/.match(obj).nil?
end
Кроме того, если вы используете Ruby 2.4+, более эффективный способ сделать это - использовать совпадение? метод и отрицание.match
устанавливает некоторые удобные MatchData (и обратные ссылки), но, поскольку вам, если вам это не нужно, вы можете сэкономить накладные расходы, используя match?
, который просто возвращает логическое значение.
def is_numeric?(obj)
!/[^0-9]/.match?(obj)
end
Другая проблема - ваша логика count < index
.
while (count < index)
line = aFile.gets
puts "Line read: " + line
index += 1
end
Поскольку index
равно 0, единственное время count
будет меньше index
, если число меньше 0. Возможно, вы имели в виду while (count > index)
?
Примечания:
https://www.ruby -lang.org / ru / news / 2016/12/25 / ruby-2-4-0-release /