to_s ve inspect
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 5 / 57.
puts, bir nesneyi onun to_s metodunu çağırarak metne dönüştürür. Varsayılan to_s yalnızca sınıf adını ve bir bellek adresini (örneğin #<Book:0x000055d0>) verir; bu nedenle sınıflar kendi to_s metodlarını tanımlar. Dize interpolasyonu da to_s metodunu çağırır:
class Book
def initialize(title, pages)
@title = title
@pages = pages
end
def to_s
"#{@title} (#{@pages} pages)"
end
end
book = Book.new("Dune", 412)
puts book
puts "Reading #{book}"Çıktı:
Dune (412 pages)
Reading Dune (412 pages)join ayrıca her öğe üzerinde to_s çağırır; böylece nesnelerinizden oluşan bir dizi sizin biçiminizde yazdırılır:
class Book
def initialize(title)
@title = title
end
def to_s
@title.upcase
end
end
shelf = [Book.new("Dune"), Book.new("Emma")]
puts shelf.join(", ")
puts "Shelf: #{shelf.join(" / ")}"Çıktı:
DUNE, EMMA
Shelf: DUNE / EMMAp programcılar içindir: bir değeri belirsizliğe yer bırakmayacak şekilde gösteren inspect çıktısını yazdırır. Bir dize tırnaklarını korur ve nil görünür. Kendi nesneleriniz için varsayılan inspect, örnek değişkenlerini listeler:
p "Dune"
puts "Dune"
p [1, "a", nil]
puts [1, "a", nil].inspectÇıktı:
"Dune"
Dune
[1, "a", nil]
[1, "a", nil]Hata ayıklama için kısa ve kesin bir açıklama elde etmek üzere inspect metodunu geçersiz kılın. p ve bir dizinin inspect yöntemi daha sonra bunu kullanırken, puts to_s kullanmaya devam eder:
class Point
def initialize(x, y)
@x = x
@y = y
end
def to_s
"(#{@x}, #{@y})"
end
def inspect
"#<Point x=#{@x} y=#{@y}>"
end
end
pt = Point.new(1, 2)
puts pt
p pt
p [pt, Point.new(0, 5)]Çıktı:
(1, 2)
#<Point x=1 y=2>
[#<Point x=1 y=2>, #<Point x=0 y=5>]Görev
KolayTrack sınıfını tamamla. initialize(title, artist, seconds) değerleri saklar. to_s, uzunluğu dakika ve iki basamaklı saniye olarak Dune by Ada (3:05) değerini döndürür; inspect ise başlık çift tırnak içinde olacak şekilde #<Track "Dune" 185s> değerini döndürür.
Sağlanan kod, parçaları title,artist,seconds satırları olarak okur, her birini puts ile yazdırır ve ardından listenin tamamını p ile yazdırır.
Kodun track.rb dosyasına yazılmalıdır. main.rb sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'track'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input = []
while (line = gets)
input << line.chomp
end
tracks = input.map do |line|
title, artist, seconds = line.split(",")
Track.new(title, artist, seconds.to_i)
end
tracks.each { |t| puts t }
p tracks
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi