Örneğin bu kod satırında yazdım printve putsfarklı sonuçlar ürettim.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Örneğin bu kod satırında yazdım printve putsfarklı sonuçlar ürettim.
1.upto(1000).each { |i| print i if i % 2 == 0 }
Yanıtlar:
puts henüz bir bağımsız değişken yoksa, her bir bağımsız değişkenin sonuna yeni bir satır ekler.
print yeni bir satır eklemez.
Örneğin:
puts [[1,2,3], [4,5,nil]] Dönecekti:
1 2 3 4 5
Oysa print [[1,2,3], [4,5,nil]]
dönecekti:
[[1,2,3], [4,5, sıfır]]
Yazdırma işleminin koyarken nil değerini nasıl vermediğine dikkat edin.
Büyük bir fark, dizileri görüntülemenizdir. Özellikle NIL'li olanlar. Örneğin:
print [nil, 1, 2]
verir
[nil, 1, 2]
fakat
puts [nil, 1, 2]
verir
1
2
Not, hiçbir görünür öğe (sadece boş bir satır) ve farklı bir satırdaki her öğe.
nil
printher argümanı, ardından $,, ile $stdout, ardından da çıktılar $\. Eşdeğerdirargs.join($,) + $\
putsher ikisini de $,ve $\"\ n" olarak ayarlar ve sonra aynı şeyi yapar print. Temel fark, her argümanın yeni bir satır olmasıdır puts.
Bu require 'english'global değişkenlere kullanıcı dostu adlarla erişebilirsiniz .
englishlib güzel ipucu
API dokümanları bazı iyi ipuçları verir:
print() → nil
print(obj, ...) → nilVerilen nesne (ler) yazar IOS . İade
nil.Akış yazmak için açılmalıdır. Dize olmayan belirli bir nesne,
to_syöntemi çağrılarak dönüştürülür . Bağımsız değişken olmadan çağrıldığında, içeriğini yazdırır$_.Çıktı alanı ayırıcısı (
$,) değilsenil, nesneler arasına yerleştirilir. Çıkış kayıt ayırıcısı ($\) değilsenil, çıktıya eklenir....
puts(obj, ...) → nilVerilen nesne (ler) yazar IOS . Önceden bir satırsonu dizisiyle bitmeyen herhangi bir satırdan sonra bir satırsonu yazar. İade
nil.Akış yazmak için açılmalıdır. Dizi bağımsız değişkeniyle çağrılırsa, her öğeyi yeni bir satıra yazar. Dize veya dizi olmayan her bir nesne,
to_syöntemi çağrılarak dönüştürülür . Bağımsız değişken olmadan çağrılırsa, tek bir satırsonu verir.
Yukarıda verilen noktalar ile biraz deneme yaparak, farklılıklar şöyle görünmektedir:
Birden çok argümanla çağrıldığında, printbunları 'çıkış alanı ayırıcısı' ile ayırır $,(varsayılan olarak hiçbir şey varsayılan değildir) putsve satırsonu satırlarıyla ayırır. putsayrıca son argümandan sonra yeni bir satır koyar, oysa printbunu yapmaz.
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 dizileri otomatik olarak açarken print şunları yapmaz:
2.1.3: 001> baskı [1, [2, 3]], [4] [1, [2, 3]] [4] => sıfır 2.1.3: 002> [1, [2, 3]], [4] 1 2 3 4 => sıfır
printbağımsız değişken olmadan yazdırılır $_(okunan son şey gets), putsyeni satır yazdırır:
2.1.3 :001 > gets
hello world
=> "hello world\n"
2.1.3 :002 > puts
=> nil
2.1.3 :003 > print
hello world
=> nilprintbu değişkeni yok sayarken çıktı kaydı ayırıcısını $\her ne yazdırırsa yazar 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! => nilputsto_sher bağımsız değişkenin çağrısını yapar ve yeni bir satırla bitmezse, her dizeye yeni bir satır ekler.
printsadece her argümanı çağırarak çıktılar to_s.
örneğin
puts "one two"::
one two
{Yeni hat}
puts "one two\n":
one two
{new line} #puts, dize yeni bir satırla bittiği için sonuca yeni bir satır eklemeyecek
print "one two":
one two
print "one two\n":
one two
{Yeni hat}
Ve çıktı almanın başka bir yolu var: p
Her nesne için, programın standart çıktısına doğrudan obj.inspect ve ardından bir yeni satır yazar.
Hata ayıklama iletisinin çıktısını almak yararlıdır.
p "aa\n\t":aa\n\t
Dizeyi kullanarak dizede çıktı putsalmak isterseniz, kullandığınız sonuçla aynı sonucu elde edersiniz print:
puts "#{[0, 1, nil]}":
[0, 1, nil]
Ancak alıntılanan bir dizeyle kalmıyorsa, evet. Tek fark kullandığımız zaman yeni hat arasında puts.
printfyerine kullanmanın putsaynı sonucu vereceğini söylersiniz , ama aslında vermez. putsVaryant sonunda bir yeni satır ekler ederken printfdeğildir önemlidir, sadece dize yansıtılmadan hiçbir dizi var vaka gibi. (Mutlaka böyle, çünkü dize hazır bilgisi değerlendirilirken enterpolasyon gerçekleşir.)