看了一个javaeye的一个关于这个的讨论,说的不是很清楚,自己测试了一下
class T1
attr_reader :v1
@v1 = 'abc'
@v1 = 'bbb'
def initialize(v1)
@v1 = v1+'dfd'
@v1 = self.get_v1
@v1 = get_v1
end
def get_v1
return @v1+'lllllll'
end
def self.get_v1
return @v1+'kkkkk'
end
@v1 = 'ccc'
end
i1 = T1.new('goo')
puts i1.get_v1 #返回空,而不是'abc'
puts T1.get_v1 #这个才是返回'abc'
puts i1.v1
返回结果:
PS F:\ror\iStar\SToDoOL> ruby mytest\cl1.rb
goodfdlllllllllllllllllllll
ccckkkkk
goodfdllllllllllllll
很有意思,这说明了如下几点:
1)不在方法里的代码如@v1='ccc'之类的,与i1无关,就是说与类实例无关,他们等于T1这个‘类实例’的initialize。且与位置无关
2)def self.get_v1 与T1.get_v1对应,与T1.new出的所有实例无关,如果在类方法中调用self.get_v1方法,与直接调用get_v1一样,指向def get_v1方法
可见,self与static不同,static是所有的对象都调用同一个函数,而self是类实例才能调用
分享到:
相关推荐
而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象…,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义 一、Top Level Context Ruby代码 puts self ...
本教程针对初学者,旨在帮助读者快速掌握Ruby的基础知识,并通过实例深入理解其用法。 首先,Ruby的基本语法是它的一大亮点。Ruby允许开发者以更自然的方式编写代码,这得益于它的语法接近于英语。例如,变量的声明...
- 方法定义:Ruby允许在类定义内部以及类外部定义方法,还可以使用`def self.method_name`定义类方法。 3. **Ruby on Rails** - Rails是基于Ruby的Web开发框架,遵循MVC(模型-视图-控制器)架构模式。 - ...
下面,我们将深入探讨一些可能涵盖在书中的Ruby编程知识点。 1. **变量和常量**: - Ruby有四种变量类型:局部变量(以小写字母或下划线开头),实例变量(以`@`开头),类变量(以`@@`开头)和全局变量(以`$`...
- **默认对象 self**:探讨 self 在 Ruby 中的含义及其在方法调用中的作用。 - **作用域规则**:深入理解 Ruby 中的作用域规则,包括局部作用域、类作用域等。 - **块与闭包**:介绍块的概念及其与闭包的区别,以及...
此外,我们还可以利用Ruby的元编程特性,自动为枚举类生成一些常用方法。例如,可以为每个枚举值创建一个对应的实例方法: ```ruby class DaysOfWeek # ... (previous code) values.each do |name, value| ...
模块是Ruby中的一种组织代码的方式,它们可以被混入到类中以扩展类的功能。 **示例**: ```ruby module EnumerableMethods def sum reduce(0) { |acc, x| acc + x } end end class Array include ...
- 块是Ruby中的一个独特特性,通常与迭代器(如`each`)配合使用,可以理解为匿名函数。 - Proc对象可以捕获块,并且可以赋值给变量,作为参数传递或存储。 5. **元编程** - Ruby的元编程能力非常强大,允许在...
这些功能主要通过Ruby的一些核心机制实现,包括: 1. **方法定义**:Ruby允许在运行时定义新方法,如`define_method`。这个方法接受一个符号作为方法名和一个代码块,然后在指定的对象或类上创建一个新方法。 2. *...
总的来说,`include`和`extend`是Ruby on Rails中模块化编程的重要工具,它们分别用于添加实例方法和类方法,而`self.included`回调可以让我们在`include`模块时自定义类的行为,比如同时添加实例方法和类方法。...
1. **基础语法**:Ruby的基础语法简洁明了,易于理解。它支持变量(如局部变量、实例变量、类变量和全局变量)和常量。Ruby的注释以`#`开始,单行和多行注释皆可。代码块常用`do..end`或花括号`{}`包裹。 2. **数据...
在Ruby编程语言中,`module_function`和`extend self`都是与模块(module)相关的特性,它们用于控制方法的可见性和行为。理解这两者的异同对于编写清晰、可维护的代码至关重要。 首先,我们来看`module_function`...
本中文教程旨在帮助初学者快速掌握Ruby的基础知识,同时也适合有一定编程经验的开发者进一步提升对Ruby的理解。 Ruby的核心特性包括: 1. **面向对象**:Ruby是纯面向对象的语言,每一个数据类型都是一个对象,...
**Ruby-Configatron:构建灵活应用配置的利器** 在Ruby世界中,良好的配置管理对于创建可扩展、可维护的应用程序至关重要。...通过深入理解和充分利用Configatron,你将能够构建出更加健壮、易于维护的Ruby应用程序。
描述中的重复部分"ruby源代码8ruby源代码6ruby源代码6ruby源代码8"看起来可能是输入错误,但我们可以理解为这是强调Ruby源代码的重要性和可能存在的版本关联。其中的"6"和"8"可能是Ruby的不同版本,Ruby的版本号通常...
这份“ruby中文文档.chm”文件应该涵盖了上述所有内容,包括概念解释、示例代码和API参考,是学习和深入理解Ruby的宝贵资源。通过阅读和实践,你可以掌握Ruby编程的基础,进而开发出高效的代码。
Ruby是一种动态类型的编程语言,以其简洁的语法和强大的功能而受到开发者喜爱。下面是对Ruby语法的详细解析: 1. 变量与常量 - 局部变量:以小写...学习Ruby,理解并熟练运用这些基础语法是成为有效开发者的基石。
- 方法:Ruby中的方法可以作为类的一部分,也可以独立存在。它们是对象行为的基本单元,可以通过`def`关键字定义。 2. **Ruby 1.9.3的新特性** - Unicode支持:Ruby 1.9.3开始默认使用UTF-8编码,增强了对多语言...