Variabel instance class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 13 dari 57.
class juga merupakan object, jadi class dapat memiliki variabel instansinya sendiri. @issued = 0 di dalam body class, dengan self sebagai class, menjadi milik class dan bukan milik instance mana pun. Method class membaca dan mengubahnya:
class Ticket
@issued = 0
def self.issue
@issued += 1
end
def self.issued
@issued
end
end
Ticket.issue
Ticket.issue
puts Ticket.issuedOutput:
2attr_accessor di dalam class << self membuat reader dan setter pada class. Instance kemudian mengakses state class melalui self.class, misalnya untuk menghitung setiap object yang dibuat oleh new:
class Robot
@built = 0
class << self
attr_accessor :built
end
attr_reader :serial
def initialize
self.class.built += 1
@serial = self.class.built
end
end
a = Robot.new
b = Robot.new
puts "#{a.serial} #{b.serial} #{Robot.built}"Output:
1 2 2Ruby juga memiliki variabel class, yang ditulis @@name. Variabel class digunakan bersama oleh class dan semua instance-nya, sehingga method instance dapat membacanya secara langsung:
class Player
@@count = 0
def initialize
@@count += 1
end
def self.count
@@count
end
def others
@@count - 1
end
end
Player.new
last = Player.new
puts Player.count
puts last.othersOutput:
2
1Variabel class juga dibagikan kepada setiap subclass (class yang dibangun berdasarkan class lain, bab 5), jadi subclass yang menetapkan nilainya juga mengubah nilainya untuk parent. Variabel instance class tetap terpisah untuk setiap class, itulah sebabnya sebagian besar kode Ruby lebih memilihnya:
class Base
@@kind = "base"
@label = "base"
class << self
attr_reader :label
end
def self.kind
@@kind
end
end
class Child < Base
@@kind = "child"
@label = "child"
end
puts Base.kind
puts Base.label
puts Child.labelOutput:
child
base
childTantangan
MudahLengkapi class Ticket. Setiap tiket baru mendapat nomor berikutnya, dimulai dari 1, dari penghitung yang disimpan dalam variabel instans class. Ticket.issued mengembalikan jumlah tiket yang telah diterbitkan sejak reset terakhir, dan Ticket.reset mengatur kembali penghitung ke 0. to_s mengembalikan #3 Concert.
Kode yang disediakan membaca baris-baris. reset mengatur ulang penghitung; setiap baris lainnya adalah nama acara, yang akan digunakan untuk membuat tiket dan mencetaknya. Pada akhirnya, kode mencetak issued: 2.
Tulis kodemu di ticket.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'ticket'
# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
input << line.chomp
end
input.each do |line|
if line == "reset"
Ticket.reset
else
puts Ticket.new(line)
end
end
puts "issued: #{Ticket.issued}"
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