ruby中的self

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"。如果写成venue="hello",ruby则将它解释为对局部变量的赋值。

 

3实例变量和self

ruby中实例变量是以@开头的变量。值得注意的是,在ruby程序中看到的任何实例变量,都是属于程序中该位置的当前对象self。

第一个@var是属于类A的,因此在创建类之后就执行了,打印出hello。方法中的@var是属于类的实例对象的,因此在创建A的实例对象之后调用方法,打印出world。这两个@var完全无关。任何对象都可以有实例变量--它的信息和对象状态的私有存储处。

转载于:https://www.cnblogs.com/smallbottle/p/3854116.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二手宏碁上网本装linux,Acer国内20日首发“上网本” 放弃Linux使用XP

据相关媒体报道 8月20日将在国内正式推出XP系统版的8.9英寸超便携笔记本电脑Aspire One,放弃使用Linux系统,硬件配置方面,除了依然采用英特尔Atom处理器之外,推出120GB传统硬盘和SSD两个版本。其中,XP系统 120G传统硬盘…

免费WiFi,仅仅为好久没联系的你们

昨日,认识五年的朋友搬来与我一起住了,说不上来,没有激动,仅仅是突然感觉生活又多了一点生机。兴致上来,晚上立马联系了已经近四个月没有联系的好友,才知道他们的生活也因这几个月发生了翻天覆地的变化。究…

五猴分桃c语言课程设计,c语言程序设计五猴分桃问题实验报告.doc

c语言程序设计五猴分桃问题实验报告.doc 课程设计报告学院、系:吉林大学珠海学院计算机科学与技术系专业名称:软件工程课程设计科目C语言程序课程设计所在班级:10班学生学号:04121010学生姓名:赵学文指导教师&#xff…

c语言100以内奇数的和为多少,编写C#程序,计算100以内所有奇数的和。谢谢了,大神帮忙啊...

编写C#程序,计算100以内所有奇数的和。谢谢了,大神帮忙啊以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!编写C#程序,计算100以内所有奇数的和。谢谢了&am…

监控系统的多协议直播(RTSP RTMP HTTP Live Streaming)

监控系统的多协议直播(RTSP RTMP HTTP Live Streaming) 转载于:https://www.cnblogs.com/cl1024cl/p/6204791.html

阿里媒体转码公共参数_Xuggler教程:转码和媒体修改

阿里媒体转码公共参数注意:这是我们的“ Xuggler开发教程 ”系列的一部分。 在上一教程中,我对视频处理Xuggler进行了简短介绍 。 在这一部分中,我们将看到Xuggler和FFmpeg提供的一些更令人兴奋的功能,例如视频转码和媒体修改。 别…

52单片机iic读写c语言,如何52单片机的I2C读写24C08程序问题排查修改

------波形在一楼isoimg2130老师提供在单片机正常运行的程序:#include "reg52.h"#include "intrins.h"typedef unsigned char u8;sbit SCLP2^1; //I2C 时钟sbit SDAP2^2; …

qfp封装能够linux,QFP、PQFP、LQFP、TQFP封装形式及PCB详解

问题:画PCB时,会发现很多的集成电路都是QFP封装,比如很多的单片机都有这种封装。各个器件商会在自己的数据手册中说明他的器件是QFP,LQFP或TQFP,然后,有的给出封装尺寸图,有的则不给。那么&…

dede文章列表加上序号效果

dede文章列表加上序号效果 css代码部分 <style type"text/css"> <!-- .downtop { FLOAT: left; OVERFLOW: hidden; WIDTH: 218px; HEIGHT: 278px } .downtop UL.text { MARGIN: 0px 10px; WIDTH: 198px; PADDING-TOP: 5px } .downtop UL.text LI { WIDTH: 1…

HDU 2845 Beans

本来是很简单的一道题&#xff0c;却想了好长时间 由于数据量比较大&#xff0c;所以逐行读入&#xff0c;逐行处理 先处理每一行的不相邻元素和的最大值&#xff0c;记录在数组b中 最后计算不相邻行的和的最大值 二者的状态转移方程都类似&#xff1a;dp[j] max(dp[j - 1], d…

ASP.NET MVC IOC 之AutoFac攻略

一、为什么使用AutoFac&#xff1f; 之前介绍了Unity和Ninject两个IOC容器&#xff0c;但是发现园子里用AutoFac的貌似更为普遍&#xff0c;于是捯饬了两天&#xff0c;发现这个东东确实是个高大上的IOC容器~ Autofac是.NET领域最为流行的IOC框架之一&#xff0c;传说是速度最快…

apache cxf_Apache CXF负载平衡和故障转移

apache cxf不久前&#xff0c;我们已经面临了基于Apache CXF的负载平衡Web服务客户端的需求。 此外&#xff0c;当某些服务器关闭时&#xff0c;客户端应自动进行故障转移。 更糟糕的是&#xff0c;服务器目标地址列表要从外部服务获取并在运行时更新。 最终&#xff0c;我们最…

HDU 1874 最直接的最短路径问题

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1874 Problem Description某省自从实行了很多年的畅通工程计划后&#xff0c;终于修建了很多路。不过路多了也不好&#xff0c;每次要从一个城镇到另一个城镇时&#xff0c;都有许多种道路方案可以选择&#xf…

领域驱动设计模式设计与实践_在域驱动设计中使用状态模式

领域驱动设计模式设计与实践域驱动设计&#xff08;DDD&#xff09;是一种开发软件的方法&#xff0c;其中&#xff0c;通过将实现与核心业务概念的不断发展的模型相联系&#xff0c;解决了问题的复杂性。 该术语是由Eric Evans创造的&#xff0c;并且有一个DDD专用站点可以促进…

html 英文文字纵向排列,CSS几种简单方法实现文字竖向排版

1.一个句子的竖向排列如图&#xff1a;1.2. test.one {width: 20px;margin: 0 auto;line-height: 24px;font-size: 20px;}.two {width: 15px;margin: 0 auto;line-height: 24px;font-size: 20px;word-wrap: break-word;/*英文的时候需要加上这句&#xff0c;自动换行*/}我是竖列…

jstree 节点拖拽保存数据库

需要jstree具有拖拽功能需要在加载jstree时添加dnd插件&#xff0c;具体看代码&#xff1a; $(**).jstree({//plugins-各种jstree的插件引入&#xff0c;展示树的多样性 plugins : [ "dnd", "types", "wholerow" ], core : {"check_callbac…

自动添加html结束标志,HTML:包含或排除可选的结束标记?

MYYA我在这里添加一些链接来帮助您了解HTML的历史&#xff0c;以便您了解各种矛盾。这不是你的问题的答案&#xff0c;但在阅读这些各种摘要后你会知道更多。我们是怎么来到这里的&#xff1f; - 潜入HTML5网络历史HTML简史HTML的历史 - HTML WG WikiDive Into HTML5的一些摘录…

JAR清单类路径不仅适用于Java Application Launcher

自从我开始学习Java以来​​&#xff0c;我几乎已经知道&#xff0c; 清单文件中的Class-Path标头字段为可执行JAR &#xff08;具有由另一个称为Main-Class清单指定应用程序起点的 JAR&#xff09;指定相对运行时类路径。 一个同事最近碰到一个让我感到惊讶&#xff0c;因为它…

通过url,获取html内容,并解析,如何使用 JavaScript 解析 URL

在 Web 开发中&#xff0c;有许多情况需要解析 URL&#xff0c;这篇主要学习如何使用 URL 对象实现这一点。开始创建一个以下内容的 HTML 文件&#xff0c;并在浏览器中打开。JavaScript URL parsing// 激动人心的代码即将写在这里如果你想尝试本文中的任何内容&#xff0c;可以…

正确使用计算机说课稿,《计算机结构原理初步》说课稿

在教师招聘考试的过程中&#xff0c;高中信息说课稿的难度就在于如何处理理论与实践的关系&#xff0c;希望这篇《计算机结构原理初步》说课稿能给予你帮助。各位考官大家好!我是号考生&#xff0c;今天我说课的题目是《计算机结构原理初步》。现代教学理论认为&#xff0c;在教…