Ruby学习之类
1.快速入门实例:
class Man def initialize(name,age) @name = name @age = age end def sayname puts @name end def sayage puts @age end end m = Man.new("jiqing",22) m.sayname m.sayage b = Man.new("zhangsan",9); b.sayname b.sayage
结果:
jiqing
22
zhangsan
9
说明:
构造函数initialize
普通函数sayname
普通函数sayage
用def作为函数的开头
end作为函数的结尾
实例化对象用类名.new()即可
2.继承,用>符号来实现继承
案例:
require 'iconv' class Man def initialize(name,age) @name = Iconv.conv('gbk', 'utf-8',name) @age = age end def sayname puts @name end def sayage puts @age end end class Tianen<Man def love puts Iconv.conv('gbk', 'utf-8',"我爱妈妈!") end end t = Tianen.new("天恩",22) t.sayname t.sayage t.love
结果:
天恩
22
我爱妈妈!
说明:
love方法是继承来的方法
这里输入中文有乱码,解决方案为
引入类“iconv”
然后用其中的conv方法进行处理
Iconv.conv('gbk', 'utf-8',"我爱妈妈!")
最好在ruby中不要出现中文。
3.在子类中增强父类方法
用super方法
案例:
require 'iconv' class Man def initialize(name,age) @name = Iconv.conv('gbk', 'utf-8',name) @age = age end def sayname puts @name end def sayage puts @age end end class Tianen<Man def sayname super puts Iconv.conv('gbk', 'utf-8',"我爱妈妈!") end end t = Tianen.new("天恩",22) t.sayname t.sayage
结果:
天恩
我爱妈妈!
22
说明:前两句都是从sayname方法中执行出来的。
4.单态方法,重写类方法
案例:
require 'iconv' class Man def initialize(name,age) @name = Iconv.conv('gbk', 'utf-8',name) @age = age end def sayname puts @name end def sayage puts @age end end a = Man.new("a",6) b = Man.new("b",7) # 单态方法 def b.sayname puts "bname" end a.sayname a.sayage b.sayname b.sayage
结果:
a
6
bname
7
说明:
修改之后,b对象吊用的方法输出的内容就变化了。
5.方法访问控制
在Ruby中,只有方法,没有函数,每一个方法都是存在于类中。如果不在任何类中定义方法,
那么这个方法属于哪个类呢?答案:Object类。Ruby将其实现为Object类的私有方法。
案例:
def my puts "my love!" end my s = "good" s.my
结果:
my love!
然后报错了。对象s无法访问私有方法。
6.private、public关键字
案例:
class Man def initialize(name,age) @name = name @age = age end private def sayname puts @name end def sayage puts @age end public def free puts "i am public" end end t = Man.new("tianen",22) t.free t.sayage t.sayname
结果:
第一个方法成功输出
第二个、第三个方法有问题
除了在方法之前设置其访问权限之外,还可以在方法定义之后设置
案例如下:
class Man def initialize(name,age) @name = name @age = age end def sayname puts @name end def sayage puts @age end def free puts "i am public" end public :free private :sayname,:sayage end t = Man.new("tianen",22) t.free t.sayage t.sayname
效果同上