方法(Method)是对对象进行的操作。
在Ruby中,只有方法可以操作实例变量,因此Ruby中的封装是强制性的。
在对象外部不可以直接访问,只能通过接口方法访问。
1、通过接口方法访问实例变量
class Person
def initialize(name,gender,age)
@name = name
@gender = gender
@age = age
end
def name
@name
end
def gender
@gender
end
def age
@age
end
end
me = Person.new("cai","male",23)
puts me.name
puts me.gender
puts me.age
这种方式通过接口方法,获取实例变量,如下所示:
def name
@name
end
这样的方式显得有些啰嗦,可以利用attr_reader,attr_writer,attr_accessor,attr这几个成员变量控制符。

2、通过变量控制符访问实例变量
class Person
attr_reader :name,:gender,:age
def initialize(name,gender,age)
@name = name
@gender = gender
@age = age
end
end
me = Person.new("cai","male",23)
puts me.name
puts me.gender
puts me.age
attr_reader:只读控制符,成员变量只可以被读取,不能改写
class Person
attr_writer :name
attr_reader :gender
attr_accessor :age
def initialize(name,gender,age)
@name = name
@gender = gender
@age = age
end
def name
@name
end
end
me = Person.new("cai","male",23)
puts me.name
puts me.gender
puts me.age
me.name = "CAI"
me.age = 22
puts me.name
puts me.age
attr_writer:只写控制符,此时可以改写name的值,但是不能够读取name的值
attr_accessor:读写控制符,即可以写,也可以读
class Person
attr :name ,true
attr :gender,true
attr :age ,false
def initialize(name,gender,age)
@name = name
@gender = gender
@age = age
end
end
me = Person.new("cai","male",23)
puts me.name
puts me.gender
puts me.age
me.age = 22
attr:控制符控制变量是否可以读写。
attr:只能第一个为符号参数,第二个参数是一个bool参数,它用于指示是否符号参数具备写方法,默认false,即只读,true可读写。
attr :age ,false
这
句代码说明age只读,不能写,所以当希望对其赋值时出现错误。