`
阿昭1981
  • 浏览: 3900 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ruby中self的一些理解

    博客分类:
  • ror
阅读更多
看了一个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是类实例才能调用
0
0
分享到:
评论

相关推荐

    Ruby self在不同环境的含义

    而由于ruby作为一个完全纯净的面向对象语言,任何东东都是对象,方法是对象,类也是对象…,所以self就会有很多环境,区分不同环境的self含义才能更好的理解程序的含义 一、Top Level Context Ruby代码 puts self ...

    Ruby入门教程中文PDF 附实例

    本教程针对初学者,旨在帮助读者快速掌握Ruby的基础知识,并通过实例深入理解其用法。 首先,Ruby的基本语法是它的一大亮点。Ruby允许开发者以更自然的方式编写代码,这得益于它的语法接近于英语。例如,变量的声明...

    ruby中文教程(源代码)

    - 方法定义:Ruby允许在类定义内部以及类外部定义方法,还可以使用`def self.method_name`定义类方法。 3. **Ruby on Rails** - Rails是基于Ruby的Web开发框架,遵循MVC(模型-视图-控制器)架构模式。 - ...

    ruby trap 初学者使用

    下面,我们将深入探讨一些可能涵盖在书中的Ruby编程知识点。 1. **变量和常量**: - Ruby有四种变量类型:局部变量(以小写字母或下划线开头),实例变量(以`@`开头),类变量(以`@@`开头)和全局变量(以`$`...

    Ruby - Ruby for Rails

    - **默认对象 self**:探讨 self 在 Ruby 中的含义及其在方法调用中的作用。 - **作用域规则**:深入理解 Ruby 中的作用域规则,包括局部作用域、类作用域等。 - **块与闭包**:介绍块的概念及其与闭包的区别,以及...

    Ruby-Ruby的面向对象的枚举

    此外,我们还可以利用Ruby的元编程特性,自动为枚举类生成一些常用方法。例如,可以为每个枚举值创建一个对应的实例方法: ```ruby class DaysOfWeek # ... (previous code) values.each do |name, value| ...

    ruby metaprograming

    模块是Ruby中的一种组织代码的方式,它们可以被混入到类中以扩展类的功能。 **示例**: ```ruby module EnumerableMethods def sum reduce(0) { |acc, x| acc + x } end end class Array include ...

    Ruby语言中文教程

    - 块是Ruby中的一个独特特性,通常与迭代器(如`each`)配合使用,可以理解为匿名函数。 - Proc对象可以捕获块,并且可以赋值给变量,作为参数传递或存储。 5. **元编程** - Ruby的元编程能力非常强大,允许在...

    Ruby元编程 源代码 Metaprogramming Ruby source code

    这些功能主要通过Ruby的一些核心机制实现,包括: 1. **方法定义**:Ruby允许在运行时定义新方法,如`define_method`。这个方法接受一个符号作为方法名和一个代码块,然后在指定的对象或类上创建一个新方法。 2. *...

    Ruby on Rails中的include和extend的常见用法

    总的来说,`include`和`extend`是Ruby on Rails中模块化编程的重要工具,它们分别用于添加实例方法和类方法,而`self.included`回调可以让我们在`include`模块时自定义类的行为,比如同时添加实例方法和类方法。...

    Ruby语言中文教程.rar

    1. **基础语法**:Ruby的基础语法简洁明了,易于理解。它支持变量(如局部变量、实例变量、类变量和全局变量)和常量。Ruby的注释以`#`开始,单行和多行注释皆可。代码块常用`do..end`或花括号`{}`包裹。 2. **数据...

    Ruby 中的 module_function 和 extend self异同

    在Ruby编程语言中,`module_function`和`extend self`都是与模块(module)相关的特性,它们用于控制方法的可见性和行为。理解这两者的异同对于编写清晰、可维护的代码至关重要。 首先,我们来看`module_function`...

    ruby中文教程

    本中文教程旨在帮助初学者快速掌握Ruby的基础知识,同时也适合有一定编程经验的开发者进一步提升对Ruby的理解。 Ruby的核心特性包括: 1. **面向对象**:Ruby是纯面向对象的语言,每一个数据类型都是一个对象,...

    Ruby-Configatron一个超级酷简单功能丰富的Ruby应用程序的配置系统

    **Ruby-Configatron:构建灵活应用配置的利器** 在Ruby世界中,良好的配置管理对于创建可扩展、可维护的应用程序至关重要。...通过深入理解和充分利用Configatron,你将能够构建出更加健壮、易于维护的Ruby应用程序。

    ruby源代码8

    描述中的重复部分"ruby源代码8ruby源代码6ruby源代码6ruby源代码8"看起来可能是输入错误,但我们可以理解为这是强调Ruby源代码的重要性和可能存在的版本关联。其中的"6"和"8"可能是Ruby的不同版本,Ruby的版本号通常...

    ruby中文文档

    这份“ruby中文文档.chm”文件应该涵盖了上述所有内容,包括概念解释、示例代码和API参考,是学习和深入理解Ruby的宝贵资源。通过阅读和实践,你可以掌握Ruby编程的基础,进而开发出高效的代码。

    ruby语法自整理

    Ruby是一种动态类型的编程语言,以其简洁的语法和强大的功能而受到开发者喜爱。下面是对Ruby语法的详细解析: 1. 变量与常量 - 局部变量:以小写...学习Ruby,理解并熟练运用这些基础语法是成为有效开发者的基石。

    ruby的API文档,有需要同事请下载

    - 方法:Ruby中的方法可以作为类的一部分,也可以独立存在。它们是对象行为的基本单元,可以通过`def`关键字定义。 2. **Ruby 1.9.3的新特性** - Unicode支持:Ruby 1.9.3开始默认使用UTF-8编码,增强了对多语言...

Global site tag (gtag.js) - Google Analytics