简单网站建设推荐,建设工程教育网网址,财政局网站建设自查报告,免费网站空间和域名self#xff0c;自己#xff0c;在ruby中表示当前对象或默认对象。程序执行的任一时刻#xff0c;有且仅有一个self。 1.谁成为self#xff0c;在什么位置成为self#xff1f; 要知道哪个对象是self#xff0c;就必须知道当前的上下文。上下文主要有顶层上下文#xff0…self自己在ruby中表示当前对象或默认对象。程序执行的任一时刻有且仅有一个self。 1.谁成为self在什么位置成为self 要知道哪个对象是self就必须知道当前的上下文。上下文主要有顶层上下文类定义上下文模块定义上下文方法定义上下文。可以根据下图总结的内容进行self的判断。 上下文 例子哪个对象是self顶层在任何定义块之外的代码main内建的默认顶层对象类定义class C类对象C模块定义module M 模块对象M方法定义 1 顶层方法 def method_name 2实例方法定义 class C def method_name 3模块中的实例方法定义 module M def method_name 4单例方法包括类方法 def obj.method_name main(内建的默认顶层对象) C的一个实例对象这个实例对象响应method_name方法调用 (1)用M扩展的单个对象 (2)混含了M的类的一个对象实例 obj 1.1顶层中的self 顶层上下文的self是main顶层方法的self也是main。main是object的一个对象。 1.2类和模块中定义中的self 类中的self是类对象本身 类中实例方法的对象是实例对象 模块的self是模块的名字 1.3单例方法中的self obj作为对象它的单例方法中的self就是obj。 2.self作为消息的默认接接收者 方法调用一般是obj.method的方式用一个圆点标记左边是接收者右边是方法。但是当接收者是self的时候可以省略接收者和圆点。ruby将self当做默认的接收者意味着你发送的消息会发给self。即method等价于self.method。 类方法中调用了hello。等价于self.hello。因为在类中,相当于A.hello打印出了”hello world“。在类外使用hello时self是main没有这个函数所以报错。用A.hello当然是对的。 但是值得注意的是在调用写方法以等号结束的方法的时候即使是发送消息给当前的self也不能省略。例如调用方法venue要写成self.venue hello。如果写成venuehello,ruby则将它解释为对局部变量的赋值。 3实例变量和self ruby中实例变量是以开头的变量。值得注意的是在ruby程序中看到的任何实例变量都是属于程序中该位置的当前对象self。 第一个var是属于类A的因此在创建类之后就执行了打印出hello。方法中的var是属于类的实例对象的因此在创建A的实例对象之后调用方法打印出world。这两个var完全无关。任何对象都可以有实例变量--它的信息和对象状态的私有存储处。 转载于:https://www.cnblogs.com/smallbottle/p/3854116.html