• Ruby类


    类的定义:
    class ClassName
    def method_name(variables)
    #some code
    end
    end

    eg:
    class Person
    def initialize(name, gender, age)
    @name = name
    @gender = gender
    @age = age
    end
    end

    people = new Person.new('Tom', 'male', 15),initialize方法在构造实例时被调用,是一个特殊的方法

    若原有的类已经定义,又有相同的类名进行类定义的话,意味着对原有的类的进行追加;方法重新定义,结果为覆盖

    对象、属性、方法:

      在Ruby中,只有方法可以操作实例变量,Ruby中的封装都是强制性的。在对象外部不可以直接访问,只能通过接口方法访问。

      只读属性:attr_reader 只写属性:attr_writer  即可读又可写:attr_accessor

      attr: name, true 读写

      attr: id, false 只读

      self关键字相当于java中的this

    继承:

      单继承,使用<即可,super关键字调用对象父类的方法,省略参数时,使用当前方法的参数进行调用

    class Base
    	def meth(info)
    		puts "This is Base #{info}"
    	end
    end
    
    class Derived < Base
    	def meth(info)
    		puts "This is Derived #{info}"
    		super
    	end
    end
    
    obj1 = Derived.new
    obj1.meth("test")
    

      

    特殊方法是指某实例特有的方法

    class SingletonTest
    	def info
    		puts "This is a SingleTon test."
    	end
    end
    
    obj1 = SingletonTest.new
    obj2 = SingletonTest.new
    
    def obj2.info
    	puts "This is obj2"
    end
    
    obj1.info
    obj2.info
    

      

    特殊类:

    属于某实例的类。

    class <<obj

    ...

    end

    class SingletonTest
    	def meth1
    		puts "This is meth1"
    	end
    
    	def meth2
    		puts "This is meth2"
    	end
    end
    
    obj1 = SingletonTest.new
    obj2 = SingletonTest.new
    
    class <<obj2
    	def meth1
    		puts "This is obj2.meth1"
    	end
    	def meth2
    		puts "This is obj2.meth2"
    	end
    	def meth3 
    		puts "This is obj2.meth3"
    	end
    end
    
    obj1.meth1
    obj1.meth2
    obj2.meth1
    obj2.meth2
    obj2.meth3
    

      

    类变量: 以@@开头,eg:@@number 使用前必须初始化

    类方法:Classname.classMethod

    存取控制:

    public方法:任何地方都能访问

    protected方法:本类的方法和子类的方法都能访问

    private方法:只能由对象自己访问,这一点和java不同!即在本类的方法中,不能调用本类其他对象的私有方法

    默认都是public方法,除了initialize和initlialize_copy方法,它们永远都是私有方法

     模块中定义的类变量被所有包含该模块的类所共享

    module TestModule

    @@foo = 10

    end

    defined? 用来判断表达式是否有定义,若尚未定义,返回nil;否则,返回一个字符串描述该表达式的种类。

  • 相关阅读:
    [R] read.table的check.names参数防止读入数据时列名前自动加上"X."
    【宏基因组】MEGAN4,MEGAN5和MEGAN6的Linux安装和使用
    洛谷—— P1077 摆花
    洛谷—— P2733 家的范围 Home on the Range
    BZOJ——T 1801: [Ahoi2009]chess 中国象棋
    洛谷—— P1379 八数码难题
    BZOJ——T 1800: [Ahoi2009]fly 飞行棋
    几种outofmemory
    几种常见web攻击手段及其防御方式
    JVM参数
  • 原文地址:https://www.cnblogs.com/forstudy/p/2546050.html
Copyright © 2020-2023  润新知