Ruby: 学习日志2: Class

来源:互联网 发布:网络成瘾的危害 编辑:程序博客网 时间:2024/05/01 23:41
#classes
class Song
    def initialize(name, artist, duration)
        @name = name
        @artist = artist
        @duration = duration
    end
end
class Song
    def to_s()
        "Song: #@name---#@artist (#@duration)"
    end
end

class KaraokeSong < Song
    def initialize(name, artist, duration, lyrics)
        super(name, artist, duration)
        @lyrics = lyrics
    end
end
song = Song.new("my fortune", "olojiang", 24)
puts song.inspect
puts song.to_s

class KaraokeSong
    def to_s
        #"Song: #@name -- #@artist (#@duration) [#@lyrics]"
        super + " [#@lyrics]"
    end
end
song2 = KaraokeSong.new("discovery" ,"olojiang", 25, "going on..")
puts
puts song2.to_s

class Song
    attr_reader :name, :artist, :duration
end
puts song2.artist
class Song
    def name
        @name
    end
    def artist
        @artist
    end
    def duration
        @duration
    end
end

puts song2.name

class Song
    def duration=(new_duration)
        @duration = new_duration
    end
end
puts song2.to_s
song2.duration = 22
puts song2.duration

class Song
    attr_writer :name, :artist
end
song2.name = "Hello ruby"
puts song2

class Song
    def duration_in_minutes=(new_duration)
        @duration = new_duration*60
    end
    def duration_in_minutes
        @duration/60.0
    end
end

puts song2.duration_in_minutes;
song2.duration_in_minutes = 4.5;
puts song2.duration;

# class variable
class XSong < Song
    @@plays = 0
    def initialize(title, artist, duration, plays)
        super(title,artist,duration)
        @plays = plays
    end
    def play
        @plays += 1
        @@plays += 1
        puts "This song plays #{@plays} times, total #{@@plays}"
    end
end

s2 = XSong.new("test","olojiang",234,0)
s1 = XSong.new("test2","olo",2234,0)
s2.play
s2.play
s1.play
s1.play
s1.play

#Class Method
#File.delete("e:/test.txt")

class SongList
    MAX_LENGTH = 5*60
    def SongList.is_too_long(length)
        puts("length is #{length}: " , length>MAX_LENGTH)
    end
end

SongList.is_too_long(s1.duration)
SongList.is_too_long(s2.duration)

#Singletons and Constructor
class Mylogger
    private_class_method :new
    @@logger = nil
    def Mylogger.create
        @@logger = new unless @@logger
        @@logger
    end
end
puts
puts Mylogger.create
puts Mylogger.create

class Shape
    def initialize(num_of_sides, perimeter)
    end
end
class Shape
    def Shape.triangle(side_length)
        return Shape.new(3, 3*side_length)
    end
    def Shape.square(side_length)
        return Shape.new(4,4*side_length)
    end
end

puts
puts Shape.square(20)

# access control
class Shape
  private
    def add(a,b)
        a+b
    end
  protected
    def minus(a,b)
        a-b
    end
  public
    def multiply(a, b)
        a*b
    end
  public :add
  private :minus
end

# access contorl example
class Accounts
    attr_reader :checking, :savings
    def initialize(checking, savings)
        @checking = checking
        @savings = savings
    end
    private
    def debit(account, amount)
        account.balance -= amount
    end
    def credit(account, amount)
        account.balance += amount
    end
    public
    def transfer(amount)
        debit(@checking, amount)
        credit(@savings, amount)
    end
end

class Account
    attr_reader :balance
    attr_writer :balance
    def initialize(balance)
        @balance = balance
    end
end

checking = Account.new(234)
savings = Account.new(3)
accounts = Accounts.new(checking, savings)
accounts.transfer(100)

puts "checking: #{accounts.checking.balance}"
puts "savings: #{accounts.savings.balance}"

#variable
puts
person="jiwei"
puts person.id
puts person.class
puts person

person2 = person
person3 = person.dup
##person.freeze
person2[0] = "x"                                              
puts "person: #{person}"
puts "person2: #{person2}"
puts "person3: #{person3}"

原创粉丝点击