Misalnya di baris kode ini saya menulis, printdan putsmenghasilkan hasil yang berbeda.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Misalnya di baris kode ini saya menulis, printdan putsmenghasilkan hasil yang berbeda.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Jawaban:
puts menambahkan baris baru ke akhir setiap argumen jika belum ada satu pun.
print tidak menambahkan baris baru.
Sebagai contoh:
puts [[1,2,3], [4,5,nil]] Akan kembali:
1 2 3 4 5
Sedangkan print [[1,2,3], [4,5,nil]]
akan kembali:
[[1,2,3], [4,5, nihil]]
Perhatikan bagaimana menempatkan tidak menghasilkan nilai nol sedangkan cetak tidak.
Perbedaan besar adalah jika Anda menampilkan array. Terutama yang dengan NIL. Sebagai contoh:
print [nil, 1, 2]
memberi
[nil, 1, 2]
tapi
puts [nil, 1, 2]
memberi
1
2
Catatan, tidak ada item nihil yang muncul (hanya baris kosong) dan setiap item pada baris yang berbeda.
nil
printmenampilkan setiap argumen, diikuti oleh $,, untuk $stdout, diikuti oleh $\. Ini setara denganargs.join($,) + $\
putsset kedua $,dan $\ke "\ n" dan kemudian lakukan hal yang sama seperti print. Perbedaan utama adalah bahwa setiap argumen adalah baris baru puts.
Anda dapat require 'english'mengakses variabel global tersebut dengan nama yang mudah digunakan .
englishlib
API API memberikan beberapa petunjuk bagus:
print() → nil
print(obj, ...) → nilMenulis objek yang diberikan ke ios . Pengembalian
nil.Aliran harus dibuka untuk ditulis. Setiap objek yang diberikan bukan string akan dikonversi dengan memanggil
to_smetodenya. Saat dipanggil tanpa argumen, cetak isi$_.Jika pemisah bidang keluaran (
$,) tidaknil, ia dimasukkan di antara objek. Jika pemisah catatan output ($\) tidaknil, itu ditambahkan ke output....
puts(obj, ...) → nilMenulis objek yang diberikan ke ios . Menulis baris baru setelah yang belum berakhir dengan urutan baris baru. Pengembalian
nil.Aliran harus dibuka untuk ditulis. Jika dipanggil dengan argumen array, tulis setiap elemen pada baris baru. Setiap objek yang diberikan bukan string atau array akan dikonversi dengan memanggil
to_smetodenya. Jika dipanggil tanpa argumen, menghasilkan satu baris baru.
Bereksperimen sedikit dengan poin-poin yang diberikan di atas, perbedaannya tampaknya:
Dipanggil dengan banyak argumen, printpisahkan dengan 'pemisah bidang keluaran' $,(yang defaultnya tidak ada), dan putspisahkan dengan baris baru. putsjuga menempatkan baris baru setelah argumen terakhir, sementara printtidak.
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
=> nilputssecara otomatis membongkar array, sementara printtidak:
2.1.3: 001> cetak [1, [2, 3]], [4] [1, [2, 3]] [4] => nihil 2.1.3: 002> menempatkan [1, [2, 3]], [4] 1 2 3 4 => nihil
printtanpa cetakan argumen $_(hal terakhir dibaca oleh gets), saat putsmencetak baris baru:
2.1.3 :001 > gets
hello world
=> "hello world\n"
2.1.3 :002 > puts
=> nil
2.1.3 :003 > print
hello world
=> nilprintmenulis pemisah catatan output $\setelah apa pun yang dicetak, sementara putsmengabaikan variabel ini:
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! => nilputspanggil to_ssetiap argumen dan tambahkan baris baru ke setiap string, jika tidak diakhiri dengan baris baru.
printhanya output setiap argumen dengan memanggil mereka to_s.
misalnya
puts "one two"::
one two
{garis baru}
puts "one two\n":
one two
{baris baru} #puts tidak akan menambahkan baris baru ke hasil, karena string diakhiri dengan baris baru
print "one two":
one two
print "one two\n":
one two
{garis baru}
Dan ada cara lain untuk menghasilkan: p
Untuk setiap objek, langsung tulis obj.inspect diikuti oleh baris baru ke output standar program.
Sangat membantu untuk menghasilkan pesan debug.
p "aa\n\t":aa\n\t
Jika Anda ingin menghasilkan array dalam string menggunakan puts, Anda akan mendapatkan hasil yang sama seperti jika Anda menggunakan print:
puts "#{[0, 1, nil]}":
[0, 1, nil]
Tetapi jika tidak menggunakan string yang dikutip maka ya. Satu-satunya perbedaan adalah antara baris baru saat kami gunakan puts.
printfalih-alih putsdalam kode contoh Anda akan memberikan hasil yang sama, tetapi kenyataannya tidak. The putsvarian menambahkan baris baru di akhir sementara printfsatu tidak, seperti kasus di mana tidak ada array yang diinterpolasi ke dalam string. (Seharusnya begitu, karena interpolasi terjadi ketika mengevaluasi string literal.)