当前位置 博文首页 > Ruby self在不同环境的含义

    Ruby self在不同环境的含义

    作者:admin 时间:2021-02-07 09:18

    而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象...,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义
    一、Top Level Context
    Ruby代码
    puts self
    打印出main,这个代表Object的默认对象main.
    二、在class或module的定义中:
    在class和module的定义中,self代表这个class或这module对象:
    Ruby代码
    class S
    puts 'Just started class S'
    puts self
    module M
    puts 'Nested module S::M'
    puts self
    end
    puts 'Back in the outer level of S'
    puts self
    end
    输出结果:
    写道
    >ruby self1.rb
    Just started class S
    Nested module S::M
    S::M
    Back in the outer level of S
    >Exit code: 0
    三、在实例的方法定义中:
    这点和java的this代表的东东一样:程序自动传递的调用这个方法的对象
    Java代码
    class S
    def m
    puts 'Class S method m:'
    puts self
    end
    end
    s = S.new
    s.m
    运行结果:
    写道
    >ruby self2.rb
    Class S method m:
    #<S:0x2835908>
    >Exit code: 0
    四、在单例方法或者类方法中:
    单例方法是针对一个对象添加的方法,只有这个对象拥有和访问这个方法,这时候self是拥有这个方法的对象:
    Ruby代码
    # self3.rb
    obj = Object.new
    def obj.show
    print 'I am an object: '
    puts "here's self inside a singleton method of mine:"
    puts self
    end
    obj.show
    print 'And inspecting obj from outside, '
    puts "to be sure it's the same object:"
    puts obj
    运行结果:
    写道
    ruby self3.rb
    I am an object: here's self inside a singleton method of mine:
    #<Object:0x2835688>
    And inspecting obj from outside, to be sure it's the same object:
    #<Object:0x2835688>
    >Exit code: 0
    在类方法中self代表这个类对象:
    Ruby代码
    # self4.rb
    class S
    def S.x
    puts "Class method of class S"
    puts self
    end
    end
    S.x
    运行结果:
    写道
    >ruby self4.rb
    Class method of class S
    >Exit code: 0
    从上面的例子我们可以看出不管是ruby的self还是java的this都表示在当前的环境下你可以访问的当前的或者默认的对象。 js
    下一篇:没有了