При запуске выдаёт ошибку.
read_info.rb:15:in `inspect': inspected result must be ASCII only or use the default external encoding (Encoding::Compatibil
ityError)
from read_info.rb:15:in `inspect'
from read_info.rb:15:in `<main>'
Нашёл причину, но как исправить пока всё равно не знаю. Если в read_info.rb в конце изменить puts и написать: puts res, то прога работает.
Конструкция "#{a}"
применяет к a
метод .inspect
, который возвращает строку с информацией об объекте в человекопонятной форме. Для строки, скажем, эту самую строку, а для массива — его элементы, с добавленными запятыми и квадратными скобками по краям.
> [1,2,3].inspect
=> "[1, 2, 3]"
А если написать puts res
, то произойдёт немного другое, объект будет передан puts
-у, а он уже там сам с ним будет колдовать. Скажем, массив выведет по-элементно:
> puts [1,2,3]
1
2
3
=> nil
В нашем случае метод inspect
ругается на то, что в том, у чего его вызвали (массив массивов), символы закодированы в UTF-8, чего inspect
никак не ждёт. Можно попробовать вызвать у массива метод to_s
, тогда должно сработать, но лучше разобрать массив в соответствии с ожиданиями и вывести элементы по отдельности. Как-нибудь так.
puts "Одинаковые профессии у:"
for person in res do
puts person.to_s
end
Возможно, Миша подскажет что-то ещё.
p.s. В Ubuntu такой проблемы нет, кстати. Попробуй запустить программу через обычную консоль, не rubymine.
С to_s совсем никак не воспринимает, всё время ошибки типа этой выдаёт:
read_info.rb:17:in `inspect': inspected result must be ASCII only or use the default exter
nal encoding (Encoding::CompatibilityError)
from read_info.rb:17:in `inspect'
from read_info.rb:17:in `<main>'
В варианте с for и в рубимайновской консоли и в обычной выдает ошибку.
read_info.rb:18:in `inspect': inspected result must be ASCII only or use the default exter
nal encoding (Encoding::CompatibilityError)
from read_info.rb:18:in `block in <main>'
from read_info.rb:15:in `each'
from read_info.rb:15:in `<main>'
Если оставить, db.results_as_hash = true, то с for у меня только в таком варианте сработало:
res.each do |person|
for pers in person
puts pers
end
end
Ну или просто puts res