Ruby 类
1. Ruby要建立新的对象,必须使用每个类的new方法。
例如:
ary = Array.new p ary # => []
与java中new Object()相通,与python不同,python 直接 a = Object()。
2. 想知道对象属于哪个类,可以使用class方法:
例如:
ary = [] str = "Hello world." p ary.class # => Array p str.class # => String
和python中的__class__类似
3. 要判断一个对象是否是某个类的实例,可以使用instance_of?方法
例如:
ary = [] str = "Hello world." p ary.instance_of?(Array) # => true p str.instance_of?(String) # => true p ary.instance_of?(String) # => false p str.instance_of?(Array) # => false
这同python中isinstance功能类似。
4. 检查有继承关系的父类,使用is_a?
例如:
str = "This is a String" p str.is_a?(String) # => true p str.is_a?(Object) # => true
5. 定义类:
class 类名 # 类名一定要以大写字母开始 类定义 end
6. initialize方法
initialize方法是一个比较特殊的方法,调用new方法建立对象时,这个initialize方法会被调用;同时,传递给new的所有实参都会传给initialize方法。
(和python的__init__方法功能类似)
7. 类实例和说明:
Ruby不允许从对象外部直接读取,写入实例变量。所有要访问对象内部的数据,都需要定义方法来操作。
class HelloWorld def initialize(myname="Ruby") @name = myname end def name return @name # get end def name= (value) @name = value # set endendruby = HelloWorld.newp ruby.name # => "Ruby"ruby.name = "bob" p ruby.name # => "bob"class HelloWorld2 def initialize(myname="Ruby2") @name = myname end attr_reader:name # 相当与set属性endruby2 = HelloWorld2.newp ruby2.name # => "Ruby2"ruby2.name = "bob2" # 8-1-class.rb:35: undefined method `name=' # for #<HelloWorld2:0xb77f9100 @name="Ruby2"> (NoMethodError)p ruby2.name
定义访问属性:
定义意义attr_reader:name只定义用来读取的方法(定义name方法)attr_writer:name只定义用来写入的方法(定义name=方法)attr_accessor:name定义用来读取与写入的方法(定义上述两个方法)