Tekrar - Otomat
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 21 / 57.
Görev
OrtaUnknownProduct, SoldOut ve NotEnoughCredit hata sınıflarını oluşturun; bunların tümü StandardError alt sınıfı olmalıdır. VendingMachine.new(stock), { "cola" => [150, 2] } biçiminde bir hash alır (fiyat sent cinsindendir, count miktardır). credit okunabilir olmalı, ancak yalnızca private setter aracılığıyla ayarlanabilmelidir. insert(cents) kredi ekler. buy(name), sırasıyla UnknownProduct (no such product: tea), SoldOut (cola is sold out) veya NotEnoughCredit (cola costs 1.50, credit 1.00) hatalarını oluşturur; aksi durumda stoktan bir ürün alır, fiyatı düşer ve adı döndürür. refund krediyi döndürür ve değerini 0 olarak ayarlar. Private bir yardımcı olan money(cents), 1.50 biçimlendirmesini yapar.
Sağlanan kod, stoğu ilk satırdan (cola:150:2,chips:90:1) okur; ardından insert n, buy name veya refund komutlarını işler. credit 2.00, bought cola, refund 0.50 veya hata mesajını yazdırır ve son olarak dışarıdan credit değerini ayarlamayı deneyerek credit is protected yazdırır.
Kodunuz unknown_product.rb, sold_out.rb, not_enough_credit.rb ve vending_machine.rb dosyalarına yazılmalıdır. main.rb, sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'unknown_product'
require_relative 'sold_out'
require_relative 'not_enough_credit'
require_relative 'vending_machine'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
input = []
while (line = gets)
input << line.chomp
end
stock = input[0].split(",").to_h do |entry|
name, price, count = entry.split(":")
[name, [price.to_i, count.to_i]]
end
machine = VendingMachine.new(stock)
input.drop(1).each do |line|
command, arg = line.split
begin
case command
when "insert"
machine.insert(arg.to_i)
puts format("credit %.2f", machine.credit / 100.0)
when "buy"
puts "bought #{machine.buy(arg)}"
else
puts format("refund %.2f", machine.refund / 100.0)
end
rescue UnknownProduct, SoldOut, NotEnoughCredit => e
puts e.message
end
end
begin
machine.credit = 500
puts "credit changed"
rescue NoMethodError
puts "credit is protected"
end
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