Например, в этой строке кода, которую я написал, printи putsпривести к другим результатам.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Например, в этой строке кода, которую я написал, printи putsпривести к другим результатам.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Ответы:
puts добавляет новую строку в конец каждого аргумента, если его еще нет.
print не добавляет новую строку.
Например:
puts [[1,2,3], [4,5,nil]] Вернется:
1 2 3 4 5
Принимая во внимание, print [[1,2,3], [4,5,nil]]
что вернется:
[[1,2,3], [4,5, ноль]]
Обратите внимание, что put не выводит значение nil, а print -.
Большая разница, если вы отображаете массивы. Особенно те, с NIL. Например:
print [nil, 1, 2]
дает
[nil, 1, 2]
но
puts [nil, 1, 2]
дает
1
2
Обратите внимание, что ни один элемент не отображается (просто пустая строка) и каждый элемент находится на отдельной строке.
nil
printвыводит каждый аргумент, затем $,, до $stdout, затем $\. Это эквивалентноargs.join($,) + $\
putsустанавливает оба параметра $,и $\\ n, а затем делает то же самое, что и print. Главное отличие в том, что каждый аргумент представляет собой новую строку с puts.
Вы можете require 'english'получить доступ к этим глобальным переменным с понятными именами .
englishlib
Документы API дают несколько полезных советов:
print() → nil
print(obj, ...) → nilЗаписывает данный объект (ы) в ios . Возвращает
nil.Поток должен быть открыт для записи. Каждый данный объект, который не является строкой, будет преобразован путем вызова его
to_sметода. При вызове без аргументов печатает содержимое$_.Если разделитель выходного поля (
$,) отсутствуетnil, он вставляется между объектами. Если разделитель выходной записи ($\) отсутствуетnil, он добавляется к выводу....
puts(obj, ...) → nilЗаписывает данный объект (ы) в ios . Записывает новую строку после любой, которая еще не заканчивается последовательностью новой строки. Возвращает
nil.Поток должен быть открыт для записи. При вызове с аргументом массива записывает каждый элемент в новую строку. Каждый данный объект, который не является строкой или массивом, будет преобразован путем вызова его
to_sметода. Если вызывается без аргументов, выводится одна новая строка.
Немного поэкспериментировав с пунктами, приведенными выше, различия кажутся:
Вызывается с несколькими аргументами, printразделяет их «разделителем выходного поля» $,(который по умолчанию не имеет значения), а putsразделяет их переводом строки. putsтакже ставит новую строку после последнего аргумента, пока printнет.
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
=> nilputsавтоматически распаковывает массивы, пока printне:
2.1.3: 001> распечатать [1, [2, 3]], [4] [1, [2, 3]] [4] => ноль 2.1.3: 002> ставит [1, [2, 3]], [4] 1 2 3 4 => ноль
printбез аргументов печатает $_(последнее, что прочитано 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
=> nilprintзаписывает разделитель выходной записи $\после того, что он печатает, 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! => nilputsВызовите to_sкаждый аргумент и добавьте новую строку в каждую строку, если она не заканчивается новой строкой.
printпросто выведите каждый аргумент, вызвав их to_s.
например
puts "one two":
one two
{новая линия}
puts "one two\n":
one two
{новая строка} #puts не добавит новую строку в результат, так как строка заканчивается новой строкой
print "one two":
one two
print "one two\n":
one two
{новая линия}
И есть еще один способ вывода: p
Для каждого объекта непосредственно записывает obj.inspect, за которым следует новая строка в стандартный вывод программы.
Это полезно для вывода отладочного сообщения.
p "aa\n\t":aa\n\t
Если вы хотите вывести массив внутри строки используя puts, вы получите тот же результат, что и при использовании print:
puts "#{[0, 1, nil]}":
[0, 1, nil]
Но если нет строки в кавычках, тогда да. Единственная разница между новой строкой, когда мы используем puts.
printfвместо putsкода в вашем примере даст тот же результат, но на самом деле это не так. putsВариант добавляет символ новой строки в конце в то время как printfодин не делает, так же , как случай , когда нет никакого массива интерполированного в строку. (Обязательно, так как интерполяция происходит при оценке строкового литерала.)