Почему «inspect» печатает массив, а не «inspect» помещает каждый элемент? - PullRequest
0 голосов
/ 08 мая 2018

У меня есть вложенный массив:

array_name = [
  ["Alice", "pizza", "soccer"],
  ["Steve", "sushi", "hockey"],
  ["Alex", "pasta", "none"]
]

Когда я использую inspect в цикле:

array_name.each do |i|
  puts i.inspect
end

выводит:

["Alice", "pizza", "soccer"]
["Steve", "sushi", "hockey"]
["Alex", "pasta", "none"]

, но с использованием puts вместо этого печатает каждый элемент из каждого отдельного массива:

array_name.each do |i|
  puts i
end

выходы:

Alice
pizza
soccer
Steve
sushi
hockey
Alex
pasta
none

Почему array_name.inspect выводит весь массив, как указано выше?

Я прочитал, что inspect пытается распечатать закодированную версию. Я не понимаю, почему следующее показывает тот же вывод, что и второй код выше:

array_name.each do |i|
  i.each do |sub_i|
    puts sub_i
  end
end

выходы: * * тысяча двадцать-пять

Alice
pizza
soccer
Steve
sushi
hockey
Alex
pasta
none

Второй и третий коды, приведенные выше, дают мне одинаковый вывод, который представляет собой не массив, а фактические элементы внутри каждого массива. Почему это?

1 Ответ

0 голосов
/ 08 мая 2018

На самом деле, именно так ведет себя метод . Из документации:

При вызове с аргументом массива записывает каждый элемент в новую строку. Каждый данный объект, который не является строкой или массивом, будет конвертирован путем вызова его метода to_s. Если вызывается без аргументов, выводится одна новая строка.

С другой стороны, существует метод p в Ruby:

Для каждого объекта непосредственно записывает obj.inspect, за которым следует символ новой строки в стандартный вывод программы.

Следующий код напечатает ожидаемый результат:

array_name.each do |i|
  p i
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...