读《programming ruby》笔记 三 Class Objects Variables

    定义一个类用 Class ,类名一般以大写开头。每个类都有一个特殊的方法 initialize 这个是类的初始化函数,等同于Java 或C#面的构造函数。
class Book
  attr_accessor :title,:content
  def initialize(title,content)
    @title = title
    @content = content
  end
end

book = Book.new("world is flat","world ...")
puts book.title
puts book.content

#output:
#world is flat
#world ...

 

在Ruby中类是永远不会被关闭的,这意味着我们可以在任何时候添加或重写类的方法,当然也可以是变量.

 

class Book
  attr_accessor :author
end
book.author = "danny"
puts book.author

# output
# danny

代码接上的例子,如果我在这里再次定义Book类里的内容,实际上是新增了一个 author的 attribute。

 

类的继承使用 < 号,子类继承父类的方法和属性,这里我们设计一个卡通书CartoonBook,它将继承它的父类的initialize方法,并且加一个新属性是否彩页。

class CartoonBook < Book
  attr_accessor :iscolor
end

book = CartoonBook.new("dargon ball", "all image......")
book.iscolor = true

puts book.title
puts book.iscolor

# output:
# dargon ball
# true
 

变量的类型有实例变量:Instance Variables , 类变量:Class  Variables,变量:Variables.全局变量:Global Variables.第一个例子中我们就用到了instance variable,@title,同时在第一个例子中我们还用到了一个方法attr_accessor,这个方法用来向外部暴露我们的一个实例变量,也就是定义这个类的属性,attr_accessor定义为读写,attr_reader为只读,attr_writer为只写。

   类变量在这个类的所有实例中是共享的,ruby中使用@@符号来定义一个类变量。类变量必须先被初始化才能使用,初始化的的工作通常就是在类的定义里为类变量赋值。

class CartoonBook < Book
  attr_accessor :iscolor
  @@total_rent =0
  def initialize(title,content)
    super
  end 
  
  def rent_to(stutdent)
    @@total_rent += 1 
    puts "total rented #@@total_rent books"
  end
end

book1 = CartoonBook.new("dargon ball", "all image......")
book1.rent_to("davi")

book2 = CartoonBook.new("micky mouse","all image......")
book2.rent_to("marry")

#output:
# total rented 1 books
# total rented 2 books
 上面的例子扩展了CartoonBook这个类,定义了@@total_rent类变量并赋值0,新增了rent_to方法,该方法实现把一本书借个一个学生同时打印书一个借出去了多少卡通书。book1,boo2都是CartoonBook类的实例,book1.rent_to后打印"total rented 1 books"说明@@total_rent==1,当book2.rent_t后@@total_rent==2,这说明了实例变量@@total_rent是在CartoonBook类中的所有实例中是共享一份copy的。

 

   变量:Variables指的是一般变量,它表示对对象的引用,比如上面的book1,book2就是变量,它们表示对CartoonBook对象的引用。name="jack"中name是对String类型对象的引用。

 

全局变量:Global Variables是在整个程序里都有效的变量。$DEBUG表示现在是否是调试模式,__FILE__当前源文件名,$LOAD_PATH当前环境变量,除了这些还有很多,在书的650页有详细的介绍。

 

 

常量:Constants,常量全部用大写字母,在Class和Module中定义的常量调用 Class::CONST,在外面定义的常量

直接调用或 ::CONST.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值