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

效果同上

原文地址:https://www.cnblogs.com/jiqing9006/p/2983602.html