美文网首页
ruby类总结

ruby类总结

作者: will2yang | 来源:发表于2018-04-07 21:37 被阅读0次

    1.new 实例化对象

    ary = Array.new
    

    3. .class查看对象属于哪个类

    4. instance_of? 判断对象是否属于某个类

    ary = []
    str = "Hello world."
    p ary.instance_of?(Array)
    p str.instance_of?(String)
    p ary.instance_of?(String)
    p str.instance_of?(Array)
    #=> true
    #=> true
    #=> false
    #=> false
    

    5 is_a?

    创建类

    1.initialize 构造方法

    2. @变量: 实例变量

    在实例里共用

    3.存储器

    class HelloWorld
      def name
        @name
      end
      def name=(value)
        @name = value
      end 
    end
    p bob.name        #=> "Bob"
    bob.name = "Robert" #该语句像是给name赋值 其实是调用name=方法
    # 简单的定义存储器
    attr_reader :name #只读
    attr_writer :name #只写
    attr_accessor :name #可以读写
    

    4.self

    调用方法时,如果省略了接收者,Ruby 就会默认把 self 作为该方法的接收者。因此,即 使省略了 self,也还是可以调用 name 方法,如下所示。

    def greet
         print "Hi, I am #{name}."
    end
    

    注意,有时候需要显式的使用self,如下:

    def test_name
      name = "Ruby" # 为局部变量赋值 self.name = "Ruby" # 调用name=方法
    end
    
    1. 类方法
      方法的接受者为类本身的方法, 几种不同的类方法定义方式
    class << HelloWorld
         def hello(name)
           puts "#{name} said hello."
         end
    end
    HelloWorld.hello("John")   #=> John said hello.
    
    class HelloWorld
      class << self
        def hello(name)
          puts "#{name} said hello."
        end 
      end
    end
    
    def HelloWorld.hello(name)
      puts "#{name} said hello."
    end
    HelloWorld.hello("John")  #=> John said hello.
    
    class 
      def self.hello(name)
        puts "#{name} said 
      end
    end
    

    6.常量

    class HelloWorld
         Version = "1.0"
    end
    p HelloWorld::Version    #=> "1.0"
    

    7.类变量

    所有类共用一个变量

    class HelloCount
      @@count = 0
    end
    

    8.方法限制调用

    public......以实例方法的形式向外部公开该方法
    private......在指定接收者的情况下不能调用该方法(只能使用缺省接收者的方式调用该方法,因此无法从实例的外部访问)
    protected......在同一个类中时可将该方法作为实例方法调用

    扩展类

    1.在原有类基础上添加

    class String
      def count_word
        ary = self.split(/\s+/) # 用空格分割self # 分解成数组
        return ary.size # 返回分割后的数组的元素总数 
      end
    end
    str = "Just Another Ruby Newbie"
    p str.count_word            #=> 4
    

    2.继承
    super调用父类里 同名的方法

    class RingArray < Array
      def [](i)
        idx = i % size
        super(idx)
      end
    end
    

    如果 没有指定 父类 Ruby 默认指定 Object 为该类的子类.
    但是,我们也有可能会希望使用更轻量级的类,而这时就可以使用 BasicObject 类,但是需要指定使用BaseObejct。

    alias与undef

    1.alias

     class C1
      def hello
        "Hello" 
      end
    end
    
    class C2 < C1
      alias old_hello hello 
      def hello
        "#{old_hello}, again"
      end
    end
    obj = C2.new
    p obj.old_hello  #=> "Hello"
    p obj.hello  #=> "Hello, again"
    

    2.undef

    undef 用于删除已定义的方法。与 alias 一样,参数可以指定方法名或者符号名。
    undef 方法名 # 直接使用方法名
    undef :方法名 # 使用符号名
    例如,在子类中希望删除父类定义的方法时,可以使用 undef。

    单例类

    通过利用单例类定义, 就可以给对象添加方法(单例方法)。

    str1 = "Ruby"
    str2 = "Ruby"
    class << str1
      def hello
        "Hello, #{self}!"
      end
    end
    p str1.hello  #=> "Hello, Ruby!"
    p str2.hello #=>错误(NoMethodError)
    

    到目前为止,我们已经多次只在特定的某个类中添加类方法。Ruby 中所有的类都是 Class 类的对象,因此,Class 类的实例方法以及类对象中所添加的单例方法都是类方法。

    相关文章

      网友评论

          本文标题:ruby类总结

          本文链接:https://www.haomeiwen.com/subject/fyoyhftx.html