ruby类3

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."
  end
end

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
  end
end


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
  end
end

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)
=> false
irb(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)
=> true
irb(main):034:0> 

class Logger
  private_class_method :new
  @@logger = nil
  def Logger.create
    @@logger = new unless @@logger
    @@logger
  end
end

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.balance
NoMethodError: protected method `balance' called for #<Accounts:0x6554bb8>
	from (irb):29
	from :0
irb(main):030:0> 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值