class Song @@plays = 0 attr_reader :name, :artist, :duration attr_writer :duration def initialize(name, artist, duration) @name = name @artist = artist @duration = duration @plays = 0 end def durationInMinutes @duration/60.0 # force floating point end def durationInMinutes=(value) @duration = (value*60).to_i end def play @plays += 1 @@plays += 1 "This song: #@plays plays. Total #@@plays plays." endend
irb(main):023:0> aSong = Song.new("Bicylops", "Fleck", 260)=> #<Song:0x6603eec @duration=260, @artist="Fleck", @name="Bicylops", @plays=0>irb(main):024:0> aSong.inspect=> "#<Song:0x6603eec @duration=260, @artist=\"Fleck\", @name=\"Bicylops\", @plays=0>"irb(main):025:0> aSong.to_s=> "#<Song:0x6603eec>"irb(main):026:0> s1 = Song.new("Song1", "Artist1", 234) => #<Song:0x64e2004 @duration=234, @artist="Artist1", @name="Song1", @plays=0>irb(main):027:0> s2 = Song.new("Song2", "Artist2", 345)=> #<Song:0x64de404 @duration=345, @artist="Artist2", @name="Song2", @plays=0>irb(main):028:0> s1.play=> "This song: 1 plays. Total 1 plays."irb(main):029:0> s2.play=> "This song: 1 plays. Total 2 plays."irb(main):030:0> s1.play=> "This song: 2 plays. Total 3 plays."irb(main):031:0> s1.play=> "This song: 3 plays. Total 4 plays."irb(main):032:0>
class KaraokeSong < Song def initialize(name, artist, duration, lyrics) super(name, artist, duration) @lyrics = lyrics endend
irb(main):038:0> aSong = KaraokeSong.new("My Way", "Sinatra", 225, "And now, the...")=> #<KaraokeSong:0x64d14e8 @lyrics="And now, the...", @duration=225, @artist="Sinatra", @name="My Way", @plays=0>irb(main):039:0> aSong.to_s=> "#<KaraokeSong:0x64d14e8>"irb(main):040:0>
class SongList MaxTime = 5*60 # 5 minutes def SongList.isTooLong(aSong) return aSong.duration > MaxTime endend
irb(main):030:0> song1 = Song.new("Bicylops", "Fleck", 260)=> #<Song:0x64eea5c @artist="Fleck", @plays=0, @name="Bicylops", @duration=260>irb(main):031:0> SongList.isTooLong(song1)=> falseirb(main):032:0> song2 = Song.new("The Calling", "Santana", 468)=> #<Song:0x64e84cc @artist="Santana", @plays=0, @name="The Calling", @duration=468>irb(main):033:0> SongList.isTooLong(song2)=> trueirb(main):034:0>
class Logger private_class_method :new @@logger = nil def Logger.create @@logger = new unless @@logger @@logger endend
irb(main):021:0> Logger.create=> #<Logger:0x66c9d54>irb(main):022:0> Logger.create=> #<Logger:0x66c9d54>irb(main):023:0>
class Accounts attr_reader :balance # accessor method 'balance' protected :balance # and make it protected def greaterBalanceThan(other) return @balance > other.balance end private def debit(account, amount) account.balance -= amount end def credit(account, amount) account.balance += amount end public #... def transferToSavings(amount) debit(@checking, amount) credit(@savings, amount) end #...end
irb(main):028:0> accounts = Accounts.new=> #<Accounts:0x6554bb8>irb(main):029:0> accounts.balanceNoMethodError: protected method `balance' called for #<Accounts:0x6554bb8>from (irb):29from :0irb(main):030:0>