to_s dan inspect
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 5 dari 57.
puts mengubah object menjadi teks dengan memanggil method to_s. to_s bawaan hanya menampilkan nama class dan alamat memori, seperti #<Book:0x000055d0>, jadi setiap class mendefinisikan versinya sendiri. Interpolasi string juga memanggil to_s:
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}"Output:
Dune (412 pages)
Reading Dune (412 pages)join juga memanggil to_s pada setiap elemen, jadi array berisi object-mu akan dicetak dalam formatmu:
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(" / ")}"Output:
DUNE, EMMA
Shelf: DUNE / EMMAp digunakan oleh programmer: perintah ini mencetak inspect, yang menampilkan nilai dengan jelas. String tetap memiliki tanda kutipnya dan nil terlihat. Untuk object-mu sendiri, inspect bawaan menampilkan variabel instance:
p "Dune"
puts "Dune"
p [1, "a", nil]
puts [1, "a", nil].inspectOutput:
"Dune"
Dune
[1, "a", nil]
[1, "a", nil]Override inspect untuk mendapatkan deskripsi singkat dan akurat untuk debugging. p dan inspect pada array kemudian menggunakannya, sementara puts tetap menggunakan to_s:
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)]Output:
(1, 2)
#<Point x=1 y=2>
[#<Point x=1 y=2>, #<Point x=0 y=5>]Tantangan
MudahLengkapi class Track. initialize(title, artist, seconds) menyimpan nilai-nilai tersebut. to_s mengembalikan Dune by Ada (3:05), dengan durasi dalam menit dan detik dua digit, dan inspect mengembalikan #<Track "Dune" 185s>, dengan judul diapit tanda kutip ganda.
Kode yang disediakan membaca track sebagai baris title,artist,seconds, mencetak setiap track dengan puts, lalu mencetak seluruh list dengan p.
Letakkan kodemu di track.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'track'
# Kode input/output yang disediakan: biarkan apa adanya
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
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode KuponLatihan sendiri: Compiler Ruby online