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.