• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ruby 学习笔记(2) 类的基本使用
    ruby语言跟c#的一些重要差别在于:
    1.ruby是动态语言,c#是静态语言--即对象在new出来以后,ruby还可以动态给对象实例添加一些属性或方法(javascript也是如此)
    2.ruby中刻意弱化了变量类型这个概念,默认情况下变量/方法都不需要声明具体(返回)类型,但其实在ruby内部,会自动根据变量的值分配类型。(可以通过 “puts 变量.class“查看)
    3.ruby相对c#来讲,可能有些雷的地方在于:父类中的private成员,居然是可以在子类中使用的!
    ...其它地方,等学习深入了再写出来
    最后上一段测试代码,展示了ruby中类的基本用法:
    复制代码 代码如下:

    class People #跟javascript这类动态语言一样,ruby中的类也没有public,private这类访问控制标识符

        def initialize(_name) #构造函数,名字是固定:initialize
            @name = _name; #约定:类的私有变量以@开头
        end

        def to_string #类似C#中的做法,这里写一个ToString方法的ruby版
            "My name is #{@name}" #ruby中方法最后一行的值,会被当作函数值返回
        end

        def get_name_size
            return @name.length #这个方法中返回的是数字型(即名称的长度)
        end

        def test #类定义的最后部分,把这个方法标记为私有方法了
            puts "private method(test) in People."
        end

        def show_name
            test #私有方法,可在内部调用
            puts "name = #{@name}"
        end

        attr_accessor:name #定义一个可读写的属性,这里也体现了ruby的一个重要思想:约定重于规范,因为@name在之前已经使用过,这里的属性只需要把@去掉,ruby就会自动智能的生成类似c#中 set{value = @name},get{return @name}的语句

        private:test #标明test方法是private属性的
        protected:get_name_size #标明get_name_size只能在本类或子类定义中使用(或者在子类定义中赋值给子类实例)

    end
    aPeople = People.new("jimmy");#创建一个People的实例
    puts aPeople.to_string #调用to_string方法
    #puts aPeople.get_name_size #将报错,因为该方法受保护
    #puts aPeople.test #将报错,因为该方法是私有方法
    aPeople.show_name
    puts aPeople.name
    aPeople.name = "杨俊明" #修改姓名
    aPeople.show_name
    #再定义一个子类
    class Man People    
        def initialize(_name)
            super
            @sex = true
        end    

        attr_reader:sex #定义只读属性sex

        def call_protected_method
            puts get_name_size #调用父类的受保护方法
        end

        def call_protected_method2(man1)
            puts man1.get_name_size #注意这里:这里可以把父类的受保护方法,动态添加到子类实例
        end

        def call_private_method #子类可以调用父类的私有方法!!! 这一点刚开始很不习惯
            test
        end

        def call_private_method2(man1)
            man1.test #注意这里:语法检查虽然可以通过,但是运行时会提示私有方法无法调用,这也是private与protected的区别
        end

        
    end
    puts "******************************"
    aMan = Man.new("jimmy.yang");
    aMan.show_name
    aMan.call_protected_method
    puts aMan.sex
    aMan.call_private_method
    aMan2 = Man.new("Mike")
    aMan.call_protected_method2(aMan2);
    #aMan.call_private_method2(aMan2);
    a = "abc";
    #aMan.call_protected_method2(a); #虽然ruby本身对变量没有类型概念,但是这样却不行,即:在调用父类的受保护方法时,其实是要类型匹配的
    puts aMan.class #显示aMan的类名称

    运行结果如下:
    复制代码 代码如下:

    >ruby classDemo.rb
    My name is jimmy
    private method(test) in People.
    name = jimmy
    jimmy
    private method(test) in People.
    name = 杨俊明
    ******************************
    private method(test) in People.
    name = jimmy.yang
    10
    true
    private method(test) in People.
    4
    Man
    >Exit code: 0

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    您可能感兴趣的文章:
    • ruby 标准类型总结
    • Ruby字符串、条件、循环、数组、Hash、类基本操作笔记
    • ruby 类常量 解析
    • js 数组实现一个类似ruby的迭代器
    • 一个简单的Ruby可逆加密解密类
    • Ruby中的Proc类及Proc的类方法Proc.new的使用解析
    • Ruby类实例变量、类实例方法和类变量、类方法的区别
    • Ruby中实现把字符串转换为类的2种方法
    • Ruby面向对象编程中类与方法的基础学习
    上一篇:ruby 学习笔记(1) 初识语法
    下一篇:RUBY 新手教程 跟我一起学ruby
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    ruby 学习笔记(2) 类的基本使用 ruby,学习,笔记,类,的,基本,