8 ответов:
putsдобавляет новую строку в конец каждого аргумента, если его еще нет.
например:
puts [[1,2,3], [4,5,nil]]вернутся:1 2 3 4 5, тогда как
print [[1,2,3], [4,5,nil]]вернул бы:[[1,2,3], [4,5,nil]]обратите внимание, как puts не выводит нулевое значение, тогда как print делает.
большая разница, если вы показываете массивы. Особенно с нулем. Например:
print [nil, 1, 2]дает
[nil, 1, 2]но
puts [nil, 1, 2]дает
1 2Примечание, не появляется нулевой элемент (просто пустая строка) и каждый элемент на другой строке.
$,, to$stdout, следовал по$\. Это эквивалентноargs.join($,) + $\
putsзадает$,и$\в "\n", а затем делает то же самое, что иputs.вы можете
require 'english'получить доступ к этим глобальным переменным с понятные имена.
API docs дать несколько хороших советов:
print() → nil
print(obj, ...) → nilзаписывает данный объект(ы) в ios. Поток должен быть открыт для записи. Если разделитель выходного поля (
$,) не равно нулю, он будет вставлен между каждым объектом. Если выходной разделитель записей ($\) Не равно нулю,он будет добавлен к выходу. Если аргументы не заданы, выводит$_. Объекты, которые не строки будут преобразованы путем вызова ихto_sметод. Без аргумента выводит содержимое переменной$_. Возвращает ноль....
puts(obj, ...) → nilзаписывает данные объекты в ios как с
IO#print. Записывает разделитель записей (обычно новую строку) после любого, который еще не заканчивается последовательностью новой строки. Если вызывается с аргументом массива, записывает каждый элемент в новую строку. Если вызывается без аргументов, выводит разделитель записей.экспериментируя немного с точками, приведенными выше, различия, похоже, заключаются в следующем:
вызывается с несколькими аргументами,
$,(который по умолчанию ничего) в то время какputsразделяет их по новым строкам.putsтакже добавляет новую строку после последнего аргумента, в то время как2.1.3 :001 > print 'hello', 'world' helloworld => nil 2.1.3 :002 > puts 'hello', 'world' hello world => nil 2.1.3 :003 > $, = 'fanodd' => "fanodd" 2.1.3 :004 > print 'hello', 'world' hellofanoddworld => nil 2.1.3 :005 > puts 'hello', 'world' hello world => nil
putsавтоматически распаковывает массивы, в то время как2.1.3 :001 > print [1, [2, 3]], [4] [1, [2, 3]][4] => nil 2.1.3 :002 > puts [1, [2, 3]], [4] 1 2 3 4 => nil
$_(последнее, что читал поgets), в то время какputsпечатает строку:2.1.3 :001 > gets hello world => "hello world\n" 2.1.3 :002 > puts => nil 2.1.3 :003 > print hello world => nil
$\после того, что он печатает, в то время какputsигнорирует эту переменную:mark@lunchbox:~$ irb 2.1.3 :001 > $\ = 'MOOOOOOO!' => "MOOOOOOO!" 2.1.3 :002 > puts "Oink! Baa! Cluck! " Oink! Baa! Cluck! => nil 2.1.3 :003 > print "Oink! Baa! Cluck! " Oink! Baa! Cluck! MOOOOOOO! => nil
putsвызовto_sкаждого аргумента и добавляет новую строку в каждую строку, если она не заканчивается новой строкой.to_s.например:
puts "one two":one two{новая строка}
puts "one two\n":one two{new line} #puts не добавит новую строку в результат, так как строка заканчивается новой линия
print "one two":one two
print "one two\n":one two{новая строка}
и есть еще один способ вывода:
pдля каждого объекта, непосредственно пишет obj.проверьте с последующей новой строкой к стандартному выходу программы.
полезно вывести сообщение отладки.
p "aa\n\t":aa\n\t
Если вы используете 'print' он не будет создавать новую строку автоматически. С помощью "puts" он автоматически создает новую строку.
The
puts(для "put string") немного отличается: он добавляет новую (пустую) строку после того, что вы хотите распечатать.
но...
Если вы хотите вывести массив внутри строки с помощью "puts", вы получите тот же результат, как если бы вы использовали "print":
puts "#{[0, 1, nil]}": [0, 1, nil]а если не в кавычках то да. Единственное различие заключается в новой строке, когда мы используем "puts" .
Comments