- 浏览: 84039 次
- 性别:
最近访客 更多访客>>
最新评论
-
Bernice_liu:
谢谢分享,受益匪浅,适合我——初学者
Ruby语言中文教程all in one -
何枫abc:
怎么感觉Ruby有点像C!!!
3.5 标识名和变量的作用域 3.6 类库 3.7 数据类型 -
何枫abc:
谢谢了!!!你写的很好,现在我正在学Ruby!!!
第二章 运行环境 -
yangzhihuan:
正想知道ruby是怎么样生成像javadoc那样的文档,多谢了 ...
3.1 注释与分行 -
whisper:
从lambda演算的角度说我们并不关心一个东西到底是什么,而只 ...
变量一定要有类型吗(一)
学习编程的过程,就是深化理解变量的过程。在面向对象编程中也不例外,这一节,我们继续深化理解变量。
先把 Ruby 放在一边,从编程语言的视角来探讨变量。
如果一个变量,第一次赋值后,就不再允许改变变量值,这样的变量称之为常变量,简称常量。就像数学分析中的常函数,y = 3 是一个平行于 x 轴,并且函数值总是为 3 的函数。常量名用大写字母开头。
如果一个变量,在其作用域上的每一个执行点,都可以改变变量值,这样的变量称之为可变量,简称变量。
如果一个变量,其作用域遍及在程序的任何位置,这样的变量称之为全局变量;与之相对,作用域仅限于在程序的某一单元的变量,称之为局部变量。
面向对象的编程,以类为单元模块。类是设计蓝图,具体的事物是实例对象。前面 5.3 节说到:“变量名,变量值,变量类型,变量的作用域,是我们学习命令式语言不可回避的几个要素”。对于面向过程的命令式语言,这四个要素已经够了;对于面向对象的命令式语言,还要加上变量的第五个要素——共享性。
如果一个变量,只能被某个实例对象使用,这样的变量称之为实例变量;如果一个变量,能被某个类的所有实例对象共享,这样的变量称之为类变量。
回到 Ruby 。常量可以定义在类和模块中,不能定义在方法中。如果在外部访问类或模块中的常量,要使用域作用符:: 。
全局变量用$ 开头。
实例变量,变量名用@ 开头;类变量,变量名用@@ 开头。
Ruby中所说的局部变量,可以是存在于类中、方法中、模块中、一个循环中、一个过程对象中。局部变量名用小写字母开头。
在4.3节,我们使用的@name(姓名)、@age(年龄)、@motherland(国籍),都是实例变量,被每个实例独享。程序 E4.3-1.rb 中,实例 p1与实例 p2的姓名不一样,年龄也不一样。
如果我们希望一类事物共享某个变量,比如:在 4.4节 Student 类中,需要有一个变量来代表班级人数,实例 p3与实例 p4假使在一个班级里,班级人数这个属性应该是相同的,当然,随着 Student 类的实例不断生成,班级人数也要不断增加,如何解决呢?
类变量能够很好地实现这个需求,看程序 E6.3-1.rb:
与全局变量和实例变量不同,类变量在使用前必须要初始化;全局变量和实例变量如果没有初始化,其值为 nil 。
如果教务主任想知道某个班级现在有多少人数,不需要到这个班级去问学生,应该可以通过其它途径来获取信息。这里要用到类方法——不依赖于任何特定实例对象的方法。类方法与实例方法的定义方式不同,定义类方法要在方法名前加上类名和一个点号“.”。看程序 E6.3-2.rb:
调用一个类方法,与定义类方法一样,要在方法名前加上类名和一个点号“.”。类方法提供了一个途径,在类的外部访问类变量,无须通过类的实例方法。
类变量,类方法在 Java 里与之相对应的是 static变量,static方法。
在Java里,你写一个类,是在画设计图纸,当你 new 的时候,才生成一个实例对象。Ruby语言中,一切都是对象,单个实例(具体事物)是对象,类(蓝图)也是对象。你拿着设计图纸可以生产出很多汽车,而设计图纸对于纸来说,只是纸这类事物的一个具体实例。 Ruby里,有元类的概念,通过关键字self 与类方法的灵活使用,程序代码可以产生很多变化,这里不再展开叙述。可以思考用类方法来实现《设计模式》一书中的单子模式。
完整阅读,请看我写的 Ruby语言中文教程all in one
先把 Ruby 放在一边,从编程语言的视角来探讨变量。
如果一个变量,第一次赋值后,就不再允许改变变量值,这样的变量称之为常变量,简称常量。就像数学分析中的常函数,y = 3 是一个平行于 x 轴,并且函数值总是为 3 的函数。常量名用大写字母开头。
如果一个变量,在其作用域上的每一个执行点,都可以改变变量值,这样的变量称之为可变量,简称变量。
如果一个变量,其作用域遍及在程序的任何位置,这样的变量称之为全局变量;与之相对,作用域仅限于在程序的某一单元的变量,称之为局部变量。
面向对象的编程,以类为单元模块。类是设计蓝图,具体的事物是实例对象。前面 5.3 节说到:“变量名,变量值,变量类型,变量的作用域,是我们学习命令式语言不可回避的几个要素”。对于面向过程的命令式语言,这四个要素已经够了;对于面向对象的命令式语言,还要加上变量的第五个要素——共享性。
如果一个变量,只能被某个实例对象使用,这样的变量称之为实例变量;如果一个变量,能被某个类的所有实例对象共享,这样的变量称之为类变量。
回到 Ruby 。常量可以定义在类和模块中,不能定义在方法中。如果在外部访问类或模块中的常量,要使用域作用符:: 。
全局变量用$ 开头。
实例变量,变量名用@ 开头;类变量,变量名用@@ 开头。
Ruby中所说的局部变量,可以是存在于类中、方法中、模块中、一个循环中、一个过程对象中。局部变量名用小写字母开头。
在4.3节,我们使用的@name(姓名)、@age(年龄)、@motherland(国籍),都是实例变量,被每个实例独享。程序 E4.3-1.rb 中,实例 p1与实例 p2的姓名不一样,年龄也不一样。
如果我们希望一类事物共享某个变量,比如:在 4.4节 Student 类中,需要有一个变量来代表班级人数,实例 p3与实例 p4假使在一个班级里,班级人数这个属性应该是相同的,当然,随着 Student 类的实例不断生成,班级人数也要不断增加,如何解决呢?
类变量能够很好地实现这个需求,看程序 E6.3-1.rb:
#E6.3-1.rb class StudentClass @@count=0 def initialize( name ) @name = name @@count+=1 end def talk puts "I am #@name, This class have #@@count students." end end p1=StudentClass.new("Student 1 ") p2=StudentClass.new("Student 2 ") p3=StudentClass.new("Student 3 ") p4=StudentClass.new("Student 4 ") p3.talk # => I am Student 3 , This class have 4 students. p4.talk # => I am Student 4 , This class have 4 students.
与全局变量和实例变量不同,类变量在使用前必须要初始化;全局变量和实例变量如果没有初始化,其值为 nil 。
如果教务主任想知道某个班级现在有多少人数,不需要到这个班级去问学生,应该可以通过其它途径来获取信息。这里要用到类方法——不依赖于任何特定实例对象的方法。类方法与实例方法的定义方式不同,定义类方法要在方法名前加上类名和一个点号“.”。看程序 E6.3-2.rb:
#E6.3-2.rb class StudentClass @@count=0 def initialize @@count+=1 end def StudentClass.student_count puts "This class have #@@count students." end end p1=StudentClass.new p2=StudentClass.new StudentClass.student_count # => This class have 2 students. p3=StudentClass.new p4=StudentClass.new StudentClass.student_count # => This class have 4 students.
调用一个类方法,与定义类方法一样,要在方法名前加上类名和一个点号“.”。类方法提供了一个途径,在类的外部访问类变量,无须通过类的实例方法。
类变量,类方法在 Java 里与之相对应的是 static变量,static方法。
在Java里,你写一个类,是在画设计图纸,当你 new 的时候,才生成一个实例对象。Ruby语言中,一切都是对象,单个实例(具体事物)是对象,类(蓝图)也是对象。你拿着设计图纸可以生产出很多汽车,而设计图纸对于纸来说,只是纸这类事物的一个具体实例。 Ruby里,有元类的概念,通过关键字self 与类方法的灵活使用,程序代码可以产生很多变化,这里不再展开叙述。可以思考用类方法来实现《设计模式》一书中的单子模式。
完整阅读,请看我写的 Ruby语言中文教程all in one
发表评论
-
8.4 迭代器、代码块、闭包
2007-02-13 06:25 1771先看一句代码: ruby 代码 (1..9). ... -
8.3 正则表达式
2007-02-13 06:13 1564一本入门小书,不想涉及正则表达式,但是正则表达式与Ruby语言 ... -
8.2 再说字符串
2007-02-13 06:07 1361一. 生成一个字符串 字 ... -
8.1 再说数组
2007-02-13 06:03 1488一. 建立一个数组 ruby 代码 #E8.1- ... -
7.4 require 和 load
2007-02-13 05:59 1365程序 E7.3-1.rb中先写了Me模块,然后include ... -
7.3 糅和(Mix-in) 与多重继承
2007-02-13 05:55 1812糅和,也译作混合插入,也许就称作 Mix-in 比较合适。 现 ... -
7.1 模块 7.2 命名空间
2007-02-13 05:50 22477.1 模块 我们常常把许 ... -
6.5 访问控制
2007-02-13 05:43 1200在Ruby里,要读取,或是改变对象的属性,唯一的途径是调用对象 ... -
6.4 单例方法
2007-02-13 05:16 1043同一份设计蓝图(类),不同的实例对象,可以表现出不同的行为特征 ... -
6.2 增强父类方法
2007-02-13 04:39 1052如果我们只是想增强父类的方法,而不是完全地替代它,就可以用关键 ... -
6.1 重载?重写
2007-02-13 04:11 1932在Java 中,重载(overload)和重写(overrid ... -
5.5 一些编码建议
2007-02-13 03:37 1161这里不是 Ruby语言的编 ... -
5.4 蓝图可以改变吗? ——动态语言
2007-02-13 03:28 781Ruby 是动态语言,你可以改变 Ruby 程序的结构,功能, ... -
5.3 详解变量—— 动态类型
2007-02-13 03:22 1200变量是什么?变量有哪些特征呢?学习编程的过程,就是深化理解变量 ... -
5.1 为什么是Ruby? 5.2 Ruby会长久么?
2007-02-13 03:16 10315.1 为什么是Ruby? 现 ... -
4.5 多态
2007-02-13 03:07 801不同的子类继承一个父 ... -
4.4 继承
2007-02-13 03:04 839如果我们要写一个学生 ... -
4.3 封装
2007-02-13 02:53 935让我们来定义一个类,类名是Person,类名首字母要大写;属性 ... -
4.1 两种思维方式 4.2 对象
2007-02-13 02:47 9394.1 两种思维方式 人们 ... -
3.11 一个综合小练习
2007-02-13 02:05 1033还是求50以内的素数,尽可能地用到本章更多的语法,看程序 E3 ...
相关推荐
如Fibonacci、杨辉三角第 6 章 变量的作用与存储类别第 6 章 变量的作用与存储类别考点i++与的++i区别习题选择题1、3、4变量的存储类型static和6.3实例剖析, 6.3实例剖析第 7 章 编译预处理//todo。未做要求第 8 章 ...
本课堂笔记主要讲解Java基础知识中的对象类基础,涵盖面向对象编程的基本概念、类和对象的定义、成员变量和成员方法、权限修饰符、局部变量、对象的销毁、方法的定义和重载、this关键字等内容。 6.1 接触面向对象...
在Red Hat Linux 6.3 x64操作系统上部署Oracle RAC 11g是一项复杂的任务,涉及到多个步骤和配置。以下将详细讲解这个过程: ### 1. 安装前的准备 在开始安装之前,确保系统满足Oracle 11g RAC的所有硬件和软件需求...
- **调试工具**:包括断点设置、单步执行、变量查看等调试功能,帮助开发者定位和解决问题。 - **项目管理**:提供项目创建、管理及版本控制,便于团队协作。 - **资源管理**:内置资源编辑器,可处理图像、音频...
8. **后处理和数据输出**: 用户可以利用UDF定制后处理工具,如生成自定义的输出变量、绘制特定的图形或者记录特定时刻的数据。 9. **错误处理和调试**: 手册会指导用户如何处理编译错误和运行时错误,以及如何使用...
4. **修改环境变量**:在`/etc/profile`文件中为Oracle用户添加特定的环境变量,例如: ```bash if [ $USER = "oracle" ]; then export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/...
这类结构变量通常由两个元素构成:Value(信号的数值)和ST(信号状态)。这种固定格式的设计使得用户能够方便地获取信号的当前状态及其对应的数值。 ###### 2.1.1 信号状态用于OS显示 信号状态可以直观地在操作站...
`this`可用于访问当前对象的成员变量,使得在成员函数中区分实例变量和局部变量成为可能。 **6.3 成员对象**是类中包含其他类的实例的情况,这允许类的复合,提高了代码的复用性。成员对象可以访问其所属类的成员,...
《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以开发...
类中的实例变量随每个实例一起创建。 **5.1.2.2 结构中的实例变量** 结构中的实例变量也随每个实例一起创建。 **5.1.3 数组元素** 数组元素是数组中存储的值。 **5.1.4 值参数** 值参数按值传递,即传递的是...
- **环境变量配置**:设置 `ORACLE_HOME`, `ORACLE_SID`, `PATH` 等环境变量,确保命令行工具可正确执行。 - **关闭防火墙**:防火墙可能干扰集群间的通信,因此在所有节点上关闭。 - **配置 NTP**:时间同步是 ...
- 类中的成员变量和方法应当合理设置访问级别。 - 在类定义中,如果不指定访问修饰符,默认为`package-private`,即仅在同一包下的其他类可以访问。 #### 3.2 成员变量的访问级别 - 每个成员变量只能有一个访问级别...
在CentOS 6.3上安装TimesTen涉及一系列步骤,包括创建用户和组、设置环境变量、解压缩安装包、运行安装脚本,以及后续的配置和启动操作。确保遵循正确的步骤,并根据你的具体需求进行适当的定制。TimesTen数据库的...
6.3 变量的命令操作: 易语言提供了简单的赋值命令,允许程序员将值赋给变量。例如,“变量 1=100”将整数100赋给变量1。此外,还有连续赋值命令,可以一次性将多个值赋给一个或多个变量,例如“连续赋值(‘全中文全...
《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以开发...
- **实例变量和类变量的区别**:类变量使用static修饰,与类相关联而不是与单个对象相关联。 - **通过类名直接访问类变量**:无需创建对象即可访问。 - **实例方法和类方法的区别**:类方法也称为静态方法,使用...
第5章 文档类和视类 5.1 文档类 5.2 文档模板类 5.3 视类 5.4 文档/视结构 5.5 菜单和加速键 5.5.1 菜单 5.5.2 添加消息处理函数 5.5.3 CMenu类 5.5.4 创建快捷菜单 5.5.5 添加加速键 ...