变量查找
在Ruby里有4种变量类型:全局变量,类变量,实例变量和局部变量。全局变量是全局储存的,局部变量储存是lexically,这里他们和我们的讨论不相关,因为他们和Ruby的类系统没有交互。
实例变量是对于一个特定的对象。它用一个@最为前缀来定义:@price是一个实例变量。正因为Ruby的对象有一个v_tbl的结构,任何一个对象就可以有实例变量。
一个类也是一个对象,所以类也有实例变量。下面的代码访问一个类的实例变量
class A
@ivar = "Instance variable of A"
end
A.instance_variable_get(:@ivar) # => "Instance variable of A"
实例变量通常是由self基于指向的对象来决定的。因为self是在class A ... end 定义中A的类对象,@ivar属于类A的对象。
类变量是不一样的。一个类的任何实例都可以访问他的类变量(是以@@开头)。类变量也可以被类自身的定义引用。尽管一个类的类变量和实例变量相似,但是他们是不同的
class A
@var = "Instance variable of A"
@@var = "Class variable of A"
def A.ivar
@var
end
def A.cvar
@@var
end
end
A.ivar # => "Instance variable of A"
A.cvar # => "Class variable of A"
在这个示例代码里,@var和@@var被保存在同一个地方,A的iv_table里。但是,他们是不同的变量,应为他们有不同的名字(@也被保存在存储变量名字里)。Ruby的访问实例变量和类变量的功能会检查以保证名字按着正确的形式传递。
A.instance_variable_get(:@@var)
# ~> -:17:in 'instance_variable_get': '@@var' is not allowed as an instance
variable name (NameError)
类变量使用有些让人迷惑。他们被继承链下方所共享,所以子类去更改类变的时候也就同时更改了父类的类变量
>> class A; @@x = 3 end
=> 3
>> class B < A; @@x = 4 end
=> 4
>> class A; @@x end
=> 4
这个有用,也很迷惑。一般上,你可以需要类实例变量——和继承链无关的——或者ActiveSupport提供的类继承属性,这些继承的值有被控制和容易辨认的方式。
分享到:
- 2008-06-07 23:14
- 浏览 998
- 评论(0)
- 论坛回复 / 浏览 (0 / 1844)
- 查看更多
相关推荐
"Advanced Rails" 涵盖了Rails开发中的高级主题和技术,是Ruby on Rails学习进阶的重要资源,尤其适合已经对基础Rails有一定了解的开发者。 在Web开发领域,Rails以其高效、简洁的代码和“约定优于配置”的哲学吸引...
这一章节为读者提供了Ruby on Rails框架的基本认识。Ruby on Rails是一种基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)设计模式。它以其优雅的语法、高效的开发速度以及“约定优于配置”的理念...
Ruby-Lockbox是一款针对Ruby和Rails应用的安全库,主要用于实现文件和数据的加密。它提供了简单易用的接口,让开发者能够轻松地在应用程序中集成高级加密标准(AES)和其他密码学算法,确保敏感信息的安全性。 Ruby...
(Ruby Recipeswas is written for Rails 1.x,this book for Rails 2.0.) Ruby on Rails continues to build up a tremendous head of steam. Fueled by significant benefits and an impressive portfolio of real...
该书面向已经具备一定Rails开发基础的技术人员,提供了深入且实用的技术指导。 **描述:“Advanced Rails Recipes 正式版。不要资源分,免费提供,要下的赶快哦。。。”** 这段描述表明这本书是正式版本,并且作者...
3. **面向对象**:Ruby是一种纯面向对象的语言,一切皆对象,连基本的数据类型都是对象。 4. **元编程能力**:Ruby具有强大的元编程能力,可以轻松地修改或扩展语言本身的功能。 5. **丰富的标准库**:Ruby拥有一个...
- **Advanced Rails**:专注于Ruby on Rails框架的高级用法和技术细节。 - **Rails Cookbook**:类似于Ruby Cookbook,但专门针对Rails框架。 - **Ruby Pocket Reference**:一本便携式的参考手册,涵盖了Ruby语言的...
(Ruby Recipeswas is written for Rails 1.x,this book for Rails 2.0.) Ruby on Rails continues to build up a tremendous head of steam. Fueled by significant benefits and an impressive portfolio of real...
Ruby是一种强大的动态编程语言,广泛用于Web开发,尤其是在Ruby on Rails框架中。为了在服务器环境中更好地利用Ruby,一些专门针对服务器优化的发行版被开发出来,以提高性能、减少资源消耗并简化管理。"Ruby-服务器...
综上所述,《Advanced Rails》是一本深度解析Rails框架高级特性的书籍,不仅覆盖了技术层面的知识点,还提供了丰富的学习资源和支持。对于希望提升Rails技能的开发者来说,本书具有很高的参考价值。
从给定的文件信息来看,我们探讨的主题是“高级Ruby on Rails食谱”(Advanced Rails Recipes),这是一本旨在为专业Ruby on Rails(RoR)开发者提供深入指导的专业参考手册。尽管该书尚处于开发阶段,但其目标是...
4. **社区资源与工具**:本书还推荐了一些与Rails相关的其他资源和工具,包括其他O’Reilly出版社的著作,如《Ajax on Rails》、《Learning Ruby》等,这些资源可以帮助读者更全面地理解和掌握Rails技术栈。...
Ruby on Rails strips complexity from the development process, enabling professional developers to focus on what matters most: delivering business value via clean and maintainable code. The Rails™ 3 ...
本书通过构建一个面向Ruby社区的社交网络平台——RailsSpace,来帮助读者掌握Ruby on Rails的核心概念和技术。本书不仅适合初学者,也适合有一定基础并希望深入了解Rails框架的开发者。 #### 二、基础知识篇 #####...