• 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

    效果同上

  • 相关阅读:
    crash收集上报方案
    keychain的使用
    自定义Xcode文件模板
    iOS实现一个简单的扫码功能
    tableView渲染延迟
    iOS app icons
    fastlane自动打包
    iOS pod封装和升级
    手写代码 -- 数组扁平化
    手写代码 -- Promise
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/2983602.html
Copyright © 2020-2023  润新知