热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

局部变量、全局变量、对象变量、类变量

局部变量:只能在变量定义的相同地方使用。如果转而调用对象的方法,或者调用自己的独立方法,变量是不起作用的,所以她的作用域(scape)被视为局部的,她只在局部代码内出现。E.g.defbasic_m

局部变量:只能在变量定义的相同地方使用。如果转而调用对象的方法,或者调用自己的独立方法,变量是不起作用的,所以她的作用域(scape)被视为局部的,她只在局部代码内出现。

E.g.

def basic_method

     x = 50

     puts x

end

 

x = 10

basic_method

puts x

 

Result:

50

10

 

全局变量: 她在程序的任何地方都可以使用,包括类和对象中。 ,    全局变量很有用, 但在ruby中并不常用。

她于面向对象编程的思想有点出入,因为一旦定义了全局变量代码就可能一依赖于他们。 而面向对象编程有一个很有用的能力,那就是吧逻辑代码块相互隔离。

E.g.

def basic_method

     puts $x

end

 

$x = 10

basic_method

puts $x

 

Result:

10

10

 

实例变量: 局部变量被限制于局部作用域,而全局变量有扩大为全局作用域。而对象变量(object variable)的作用域在于当前的对象,可以说很方便简捷, 很符合面向对象的思想。

E.g.

Class Square

     def initialize(slide_length)

          @slide_length = slide_length

     end

 

     def area

 

          @slide_length *@slide_length

     end

end

 

a = Square.new(10)

b = Square.new(6)

puts a.area

puts b.area

 

Result:

100

36

 

类变量: 她的作用域在整个类中,而不是处于该类的特定对象中。与对象变量的单个@符号相比,类变量以两个@@符号作为前缀。

对于存储与某类所有对象都相关的信息,她特别有用。

E.g.

class square

     def initialize

          if defined?(@@number_of_squares)

               @@number_of_squares += 1

          else

               @@number_of_squares =1

          end

     end

end

由于@@number_of_squares是一个类变量,因此每次创建新对象时她已经存在(除了第一次,不过这正是要检查她是否已经存在的原因,如果不存在,则向其赋予初始值1)

PS: 或者用三木运算符来简化代码。

@@number_of_squares = defined?(@@number_of_squares)?@@number_of_squares+1:1

 


推荐阅读
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • iOS 小组件开发指南
    本文详细介绍了iOS小部件(Widget)的开发流程,从环境搭建、证书配置到业务逻辑实现,提供了一系列实用的技术指导与代码示例。 ... [详细]
  • 深入理解iOS中的链式编程:以Masonry为例
    本文通过介绍Masonry这一轻量级布局框架,探讨链式编程在iOS开发中的应用。Masonry不仅简化了Auto Layout的使用,还提高了代码的可读性和维护性。 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • 本文提供了一个SQL脚本,用于在Microsoft SQL Server中创建一个数据字典视图,该视图详细列出了表名、表描述、字段名称、字段描述、字段类型、字段大小、字段精度、是否可为空、默认值以及是否为标识或主键等信息。 ... [详细]
  • 探讨如何在给定数组中寻找一个连续子数组,使其和至少达到指定值s,同时确保子数组长度最短。 ... [详细]
  • IntelliJ IDEA配置微服务启动显示
    通过编辑IntelliJ IDEA的workspace.xml文件,可以实现微服务启动对象的显示。具体步骤包括定位并修改workspace.xml中的RunDashboard部分。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 本文探讨了一个Web工程项目的需求,即允许用户随时添加定时任务,并通过Quartz框架实现这些任务的自动化调度。文章将介绍如何设计任务表以存储任务信息和执行周期,以及如何通过一个定期扫描机制自动识别并加载新任务到调度系统中。 ... [详细]
  • 探讨多种方法来确定Java对象的实际类型,包括使用instanceof关键字、getClass()方法等。 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 将XML数据迁移至Oracle Autonomous Data Warehouse (ADW)
    随着Oracle ADW的推出,数据迁移至ADW成为业界关注的焦点。特别是XML和JSON这类结构化数据的迁移需求日益增长。本文将通过一个实际案例,探讨如何高效地将XML数据迁移至ADW。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
author-avatar
寒时凝结公寓_264
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有