热门标签 | 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

 


推荐阅读
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • C#编程中按钮控件的使用与优化 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • 清华大学出版社 | 杨丹:基于MATLAB机器视觉的黑色素瘤皮肤癌检测技术及源代码分析(第1689期)
    清华大学出版社 | 杨丹:基于MATLAB机器视觉的黑色素瘤皮肤癌检测技术及源代码分析(第1689期) ... [详细]
  • 本文详细探讨了在ASP.NET环境中通过加密数据库连接字符串来提升数据安全性的方法。加密技术不仅能够有效防止敏感信息泄露,还能增强应用程序的整体安全性。文中介绍了多种加密手段及其实施步骤,帮助开发者在日常开发过程中更好地保护数据库连接信息,确保数据传输的安全可靠。 ... [详细]
  • 当在 IntelliJ IDEA 中遇到“Sources not found for: XXX”问题时,可以通过命令行执行 `mvn dependency:resolve -Dclassifier=sources` 来解决源代码下载失败的问题。此方法能够有效确保项目依赖的源代码被正确获取,从而便于调试和代码阅读。更多详细信息可参考相关技术文档或官方指南。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 本文深入解析了Java 8并发编程中的`AtomicInteger`类,详细探讨了其源码实现和应用场景。`AtomicInteger`通过硬件级别的原子操作,确保了整型变量在多线程环境下的安全性和高效性,避免了传统加锁方式带来的性能开销。文章不仅剖析了`AtomicInteger`的内部机制,还结合实际案例展示了其在并发编程中的优势和使用技巧。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 本文详细探讨了Java事件处理机制的核心概念与实现原理,内容浅显易懂,适合初学者逐步掌握。通过具体的示例和详细的解释,读者可以深入了解Java事件模型的工作方式及其在实际开发中的应用。 ... [详细]
  • 并发编程入门:初探多任务处理技术
    并发编程入门:探索多任务处理技术并发编程是指在单个处理器上高效地管理多个任务的执行过程。其核心在于通过合理分配和协调任务,提高系统的整体性能。主要应用场景包括:1) 将复杂任务分解为多个子任务,并分配给不同的线程,实现并行处理;2) 通过同步机制确保线程间协调一致,避免资源竞争和数据不一致问题。此外,理解并发编程还涉及锁机制、线程池和异步编程等关键技术。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
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社区 版权所有