Menu
CoddyTech

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 / EMMA

p 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].inspect

Output:

"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>]
challenge icon

Tantangan

Mudah

Lengkapi 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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online