class A
@@var=1
@class_var="class var"
attr_accessor :object_var,:object_var2
class << self
attr_accessor :class_var
def a_method1
end
end
def A.a_method2
end
def self.a_method3
end
def ask
@object_var="object var"
end
end
a=A.new
def a.ask1
end
与类相关的无非是对象,类本身,对象实例变量,类本身实例变量,类变量,对象的实例方法,类的实例方法(类方法)
先说各种变量:
a=A.new
p a.instance_variables #对象的实例变量
a.ask
p a.object_var2=2
p a.instance_variables #对象的实例变量
p A.instance_variables #类的实例变量
打印信息:
[ ]
2
[:@object_var, :@object_var2]
[:@class_var]
[ ] 很显眼,ruby和其他语言不同,他的变量属于对象本身,也就是说,@object_var存在于方法ask内,如果这个方法不调用,那么a对象是不会有实例变量的,而且如果调用方法,方法内的实例变量是nil,退出方法的时候,因为是空指针引用,也会被GC回收掉,所以也是[ ]。
这里类的实例变量没有调用为什么也会显示出来,是因为ruby的class A end 这个作用域内的代码是会被执行的,所以A是有实例变量的。
对象的实例变量是存在于对象本身之中的,这里的对象可以是a,可以是A,可以是任何,因为ruby一切都是对象。
方法:
p a.methods.grep(/ask/)
p a.class.instance_methods.grep(/ask/)
p A.methods.grep(/a_method/)
p A.class.instance_methods.grep(/a_method/)
打印:
[:ask1, :ask]
[:ask]
[:a_method1, :a_method2, :a_method3]
[]
说明:对于单件方法是存在于单件类中的,而对于实例方法是存在于所在的类中的,只有这样才可以实现,对于特定的对象的方法,只能特定对象能访问,对于实例方法,所有对象都可以方法。
下面重点说下attr_accessor 存在哪里:
p A.class.instance_methods(false).grep(/^class_var=?$/) #不打印祖先的方法
p A.methods.grep(/^class_var=?$/)
p a.class.instance_methods(false).grep(/^object_var=?$/) #不打印祖先的方法
p a.methods.grep(/^object_var=?$/)
打印:
[]
[:class_var, :class_var=]
[:object_var, :object_var=]
[:object_var, :object_var=]
从上面结果可知,对于类的attr_accessor 是存在于类的单件类中的,对象的attr_accessor是存在于对象所在类的。对于单件类,object对象必须要存在单件方法才会生成单件类,而类的单件类是一开始就存在了。
类变量:
@@var这种带@@的是类变量,这个很特殊,它被所有对象都共享,所以它存在于类中,而且必须要初始化。
分享到:
相关推荐
在Ruby中,元编程的强大之处在于其语法简洁且易于理解,使得程序员可以轻松地实现动态行为。Ruby提供了多种元编程工具,包括: 1. **方法定义与调用**:Ruby允许在运行时定义和修改方法,如`define_method`函数可以...
Ruby的对象模型是理解元编程的基础。书中通过组织和解释Ruby对象模型的概念,帮助读者清晰理解Ruby的继承和混入机制。 2. 闭包(Closures):在Ruby中,闭包是匿名函数的概念,它能够捕获定义时的上下文环境。闭包...
元编程技术广泛应用于多种编程语言中,其中Ruby因其灵活的语言特性和动态特性而成为元编程的理想选择之一。 #### 1.2 Ruby中的元编程特点 - **动态性**:Ruby是一种动态类型语言,这意味着可以在运行时修改类和对象...
Ruby元编程的核心概念包括类、模块、方法、变量和对象的动态性。以下是对这些概念的详细解释: 1. **类与模块**:在Ruby中,类和模块都是对象。你可以动态地创建和修改它们。例如,你可以通过`Class.new`创建一个新...
ruby 元编程 中文 《Ruby元编程》以案例形式循序渐进地介绍Ruby特有的实用编程技巧。通过分析案例、讲解例题、回顾Ruby代码库的实现细节,作者不仅向读者展示了Ruby编程的优势和Ruby特有...Ruby之父松本行弘作 序推荐。
本书得到了Ruby之父松本行弘的高度评价,并被推荐为学习Ruby元编程的必读书籍之一。 #### 三、书中涵盖的主要元编程技巧 1. **对象模型与类的动态行为**:Ruby的对象模型非常灵活,本书详细解释了如何利用这一特点...
Ruby元编程中文版
Rails的ActiveRecord模型就是通过元编程来实现其魔法般的动态方法生成,例如,我们可以直接对模型使用find_by或where等方法,而这些方法在Ruby代码中是不存在的,它们是在运行时动态生成的。Rails的路由系统、视图...
本书的第一部分“Ruby元编程”是本书的核心部分,他讲述了一个资深程序员在办公室一周发生的事情。 本书的第二部分“Rails中的元编程”是一个元编程实例,Rail是Ruby标志性框架。 在阅读本书之前,需要了解本书的三...
理解Ruby的对象模型是进行元编程的基础。通过了解对象是如何创建、如何存储数据以及如何交互的,我们可以更灵活地控制程序的行为。 2. **动态方法定义**:Ruby允许在运行时动态地添加新方法到类或对象上。这种能力...
ruby元编程 第2版 中文 目录清晰 方便广大通勤族路上看,如果喜欢请购买正版纸质图书
Ruby元编程是编程领域中的一个高级技术,它允许程序员在运行时操纵语言的结构和行为。这本《Metaprogramming Ruby》书籍深入探讨了如何利用Ruby的特性进行元编程,帮助开发者提升代码的灵活性、可扩展性和复用性。源...
《Ruby元编程》以案例形式循序渐进地介绍了Ruby特有的实用编程技巧 元编程 通过分析案例 讲解例题 回顾Ruby代码库的实现细节 《Ruby元编程》作者Paolo Perrotta不仅向读者展示了Ruby编程的优势和Ruby特有的解决问题...
### Ruby动态编程语言的核心知识点 #### 一、Ruby的特点与优势 **1. 简洁而优雅** - **设计哲学:“最小意外原则”** - Ruby的设计理念旨在减少不必要的复杂性和冗余,使得代码更加直观易懂。 - **简洁的语法** ...
Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本资料包主要关注的是基于Ruby编程的基础知识和应用,包括如何使用Ruby进行开发和解决问题。 Ruby的设计哲学强调程序员...
Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门...
### Ruby元编程基础学习笔记整理 #### 一、语言构建(Language Constructs) 在Ruby中,诸如变量、类和方法等元素统称为语言构建(Language Constructs)。这些构建块是构成Ruby程序的基础。 ##### 示例代码分析 ```...