1:属性的访问性。
ruby并不支持直接访问类中的属性,如果要访问类中的属性,需要先通过attr_reader:属性名(只读),attr_writer:属性名(只写),attr_accessor:属性名(读写)来设定属性的访问权限。ruby在类里没办法定义变量,只能在方法中定义变量。方法和方法之间如果想通信只能通过@变量,也就是实例变量进行通信,ruby通过attr_xxxx可以控制@变量的访问性。
2:方法的访问性。
方法的访问性是通过public,private和protected进行限制的。public :方法名1,方法名2......这样的方式进行声明的。属性的访问性可以放在前面,但方法的访问性要放在方法之后,如果放在方法前面会出现方法未定义的报错。除了初始化方法恒化private,其它方法缺省为public
3:类方法(静态方法)。 ruby中定义类方法如下(即类名或self)
class HelloWorld def HelloWorld.hello(name) print name," said Hello." end end HelloWorld.hello("John")
class HelloWorld def self.hello(name) print name," said Hello." end end HelloWorld.hello("John")
需要注意的是,类方法不能访问实例变量
4:类变量(静态变量),ruby中类变量是通过加@@标识的
5:类常量
类中还可以定义常量,还是要求大写字母开头。类中不能定义和方法平缓的变量,但是可以定义和方法平级的常量,常量可以被所有方法调用。类常量的调用方法是类名::常量名
6:模块
模块是ruby特有的功能之一。模块和类很像,但和类最大的不同在于模块不能实例化,也不能继承,模块的作用有两个,一个是用于提供命名空间。第二提供Mix-in功能。
模块的常量和类常用调用方法一样。模块名::常量名。模块的方法调用和类的方法调用不同,可以使用模块::方法名,也可以使用模块.方法名
模块定义的方法默认是不对外部公开的,(模块内没有public private protect关键字),要将方法对模块外部公开,必须使用module_function
module HelloModule Version = "1.0" def hello(name) print "Hello, ",name,".\n" end module_function :hello #注意:冒号后不能有空格 end p HelloModule::Version #=>"1.0" HelloModule::hello("Alice") #=> hello, Alice. include HelloModule p Version #=>"1.0" hello("Alice") #=>Hello, Alice