programmingruby:Programming Ruby 读书笔记(一)

  1. 成员变量读写属性: attr_reader 和 attr_writer Test

 def initialize(name)
  @name = name
 end
  
 attr_reader :name
 attr_writer :name
  
end
  
test = Test.("AAA")
  puts test.name
test.name = "BBB"
puts test.name


  如果不使用这2个关键字则按照Java风格这样写

Test
  
 def initialize(name)
  @name = name
 end
 
 def getName
   @name
 end
 
 def Name(name)
  @name = name
 end
end
  
test = Test.("AAA")
test.Name("BBB")
puts test.getName


  注意:getName思路方法中是可以省去

  2.类变量和类思路方法

Song
  
 @@count = 0
  
 def initialize
  @count = 0
 end
 
 def play
  @count = @count + 1
  @@count = @@count + 1
  puts "This song #@count plays. Total #@@count plays."
 end
  
end
  
s1 = Song.
s2 = Song.
s1.play
s2.play
s1.play
s1.play


  类思路方法:

Song
  
 @@count = 0
 
 def Song.TotalCount
  @@count
 end
  
end
  
s1 = Song.
puts Song.TotalCount
实现单例模式(Singleton)
  
Song
  
 private__method :
 @@name = nil
 
 def Song.create
  @@name = unless @@name
  @@name
 end
  
end
  
song = Song.create


  3.和散列表:

Test
  
 a = ['ant', 'bee', 'cat', 'dog']
 puts a[0]
 
 b = %w{ ant bee cat dog }
 puts b[2]
 
 c = {
  'a' => 'ant',
  'b' => 'bee',
  'c' => 'cat',
  'd' => 'dog'
 }
 puts c['d']
 
 d = Hash.
 d['a'] = 'ant'
 d['b'] = 'bee'
 d['c'] = 'cat'
 d['d'] = 'dog'
 puts d.length
 
end
4.ruby中变量不是对象只是引用

Test
  
 person1 = "Tim"
 person2 = person1
 
 person1[0] = 'J'
 
 puts person1
 puts person2
 
end


  旦改变person1person2也会跟随改变

  但是下面代码情况就不样了

Test
  
 person1 = "Tim"
 person2 = person1.dup
 
 person1[0] = 'J'
 
 puts person1
 puts person2
 
end


  我们还可以使用freeze思路方法冻结个对象下面代码运行会报错

Test
  
 person1 = "Tim"
 person2 = person1
 
 person1.freeze
 
 person1[0] = 'J'
 
 puts person1
 puts person2
 
end


  5.ruby思路方法作用域

  http://www.javaeye.com/topic/76855

Tags:  programmingruby

延伸阅读

最新评论

发表评论