6 ответов:
p fooпечатьfoo.inspectза ним следует новая строка, т. е. она выводит значениеinspectвместоto_s, который больше подходит для отладки (потому что вы можете, например, сказать разницу между1,"1"и"2\b1", который вы не можете при печати безinspect).
также важно отметить, что
puts"реагирует" на классеto_sопределенаpнет. Например:class T def initialize(i) @i = i end def to_s @i.to_s end end t = T.new 42 puts t => 42 p t => #<T:0xb7ecc8b0 @i=42>Это следует непосредственно из
.inspectвызова, но не очевидно на практике.
в дополнение к вышеприведенным ответам существует тонкая разница в выводе консоли, а именно наличие / отсутствие инвертированных запятых / кавычек , которые могут быть полезны:
p "+++++" >> "+++++" puts "=====" >> =====Я считаю это полезным, если вы хотите сделать простой индикатор выполнения, используя их близкого родственника, print:
array = [lots of objects to be processed] array.size >> 20это дает 100% индикатор выполнения:
puts "*" * array.size >> ********************и это добавляет инкрементный * на каждой итерации:
array.each do |obj| print "*" obj.some_long_executing_process end # This increments nicely to give the dev some indication of progress / time until completion >> ******
ставит
puts(obj, ...) → nilзаписывает данный объект(ы) в ios. Пишет новая строка после этого делай уже нет конец с новой строки последовательности. возвращает nil.
поток должен быть открыт для записи. Если вызывается с помощью массив аргумент, пишет в каждом элементе на новый линия. Каждый данный объект это не строка или массив будет преобразован путем вызова его
to_sметод. Если вызывается без аргументов, выводит одну новую строку.давайте попробуем его на irb
# always newline in the end >> puts # no arguments => nil # return nil and writes a newline >> puts "sss\nsss\n" # newline in string sss sss => nil >> puts "sss\nsss" # no newline in string sss sss => nil # for multiple arguments and array >> puts "a", "b" a b => nil >> puts "a", "b", ["c", "d"] a b c d => nilp
p(obj) → obj click to toggle sourcep(obj1, obj2, ...) → [obj, ...]p() → nil
Для каждого объекта, непосредственно пишетobj.inspectпосле чего следует новая строка к стандарту программы выход.в irb
# no arguments >> p => nil # return nil, writes nothing # one arguments >> p "sss\nsss\n" "sss\nsss\n" => "aaa\naaa\n" # multiple arguments and array >> p "a", "b" "a" "b" => ["a", "b"] # return a array >> p "a", "b", ["c", "d"] "a" "b" ["c", "d"] => ["a", "b", ["c", "d"]] # return a nested array
эти 2 равны:
p "Hello World" puts "Hello World".inspect(проверить дает более буквальное представление объекта по сравнению с to_s способ)
Comments