`
simohayha
  • 浏览: 1400878 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

ruby中的类变量与类实例变量

    博客分类:
  • ruby
阅读更多
首先,在ruby1.8中类变量是所有子类和父类共享的,可以看下面的代码:

class IntelligentLife  
  @@home_planet = nil
  
  def self.home_planet
    @@home_planet
  end
  def self.home_planet=(x)
    @@home_planet = x
  end
  #...
end
class Terran < IntelligentLife
  @@home_planet = "Earth"
end

class Martian < IntelligentLife
  @@home_planet = "Mars"
end


p IntelligentLife.home_planet
p Terran.home_planet
p Martian.home_planet


可以看到结果是相同的,都是"Mars".这是因为父类的类变量是被整个继承体系所共享的.

在这里我们如果想要得到我们所需要的结果,我们就要使用类实例变量,因为类实例变量是严格的per-class。而不是被整个继承体系所共享。

class IntelligentLife  
  @home_planet = nil
  
 class << self
    attr_accessor :home_planet
  end
end
class Terran < IntelligentLife
  @home_planet = "Earth"
end

class Martian < IntelligentLife
  @home_planet = "Mars"
end


p IntelligentLife.home_planet
p Terran.home_planet
p Martian.home_planet



而在1.9中,类变量不再被继承体系所共享。也就是和java中的静态变量差不多了。

下面的代码在1.9中运行.

class IntelligentLife  
  @@home_planet = "bobo"
  def self.home_planet
    @@home_planet
  end
end
class Terran < IntelligentLife
  @@home_planet = "Earth" 
end

class Martian < IntelligentLife
  @@home_planet = "Mars"
  def self.home_planet
    @@home_planet
  end
end


p IntelligentLife.home_planet
p Terran.home_planet
p Martian.home_planet


可以看到这时的类变量才是真正的类变量,也就是说是per-class的了.





1
3
分享到:
评论
1 楼 itiProCareer 2014-06-01  
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 后类变量不再被继承体系所共享???????

相关推荐

    类变量、全局变量、实例变量, 多态、为什么ruby、ruby编码规范

    本文将深入探讨Ruby语言中的类变量、全局变量、实例变量,以及多态的概念,并结合Ruby编码规范来阐述如何有效地编写代码。 一、类变量 类变量在Ruby中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的...

    Ruby中类变量和实例变量的比较

    ### Ruby中类变量和实例变量的比较 在Ruby编程语言中,类变量和实例变量都是用来存储数据的重要机制。它们虽然都是变量,但在用途、作用范围、生命周期等方面有着明显的区别。接下来,我们将详细介绍这两者之间的四...

    Ruby类实例变量、类实例方法和类变量、类方法的区别

    在Ruby语言中,类实例变量、类实例方法与类变量和类方法是构成面向对象编程模型的重要组成部分。它们各自有不同的用途和行为特性,下面详细介绍这些概念的区别以及它们的使用场景。 首先,类实例变量和类实例方法都...

    Ruby中的变量学习总结

    Ruby中的变量有几种形式,分别是局部变量、实例变量、类变量、全局变量,对于初学者来说,常常容易搞混,尤其像本人这种做java的,理解起来还是头痛,经过仔细辨别学习,将这几种变量的差异及使用场景总结如下: ...

    Ruby语言教程:Ruby 变量示例

    本文将详细介绍 Ruby 中的五种主要变量类型:普通变量、全局变量、实例变量、类变量以及常量,并通过示例代码加深理解。 #### 二、Ruby中的变量类型详解 ##### 1. 普通变量 (Variable) - **定义与使用**: - 普通...

    Ruby 方法、类

    attr_accessor :name, :age # 创建名为name和age的实例变量,并提供getter和setter方法 def initialize(name, age) @name = name @age = age end def introduce puts "My name is #{@name} and I am #{@age...

    ruby初级中文教程与实例

    1. 变量:Ruby中的变量分为五种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)、全局变量(以`$`开头)和常量(以大写字母开头)。每种变量都有其作用域和使用场景。 2. ...

    Ruby入门教程中文PDF 附实例

    类和对象是Ruby的核心概念,你可以自定义类并创建实例。例如,创建一个名为`Person`的类并初始化姓名: ```ruby class Person def initialize(name) @name = name end end person = Person.new("Alice") ``` Ruby...

    01Ruby 变量.docx

    在这个例子中,`@cust_id`、`@cust_name` 和 `@cust_addr` 都是实例变量。 ##### 4. 类变量 (Class variable) 类变量以 `@@` 开头,用于在类的所有实例之间共享数据。它们不仅在整个类中可见,而且在类的所有子类...

    ruby 中文文档 必备资料

    Ruby支持四种基本变量:局部变量、实例变量、类变量和全局变量,它们分别以小写字母、@、@@和$开头。数据类型则包括字符串、数字、布尔值、数组、哈希等。控制结构包括条件语句(如if/else,case)和循环(如while、...

    Ruby 语言中类与对象简介,入门级语法介绍

    ### Ruby 语言中类与对象简介及入门级语法详解 #### 一、Ruby中的面向对象概念 Ruby是一种纯粹的面向对象编程语言,这意味着在Ruby中几乎所有的内容都是对象。面向对象编程(Object-Oriented Programming,OOP)的...

    Ruby中文教程,佩戴实例

    变量在Ruby中有四种类型:局部变量、实例变量、类变量和全局变量,它们都有特定的标识符前缀。数据类型包括基本类型和复杂类型,如数组、哈希(字典)、集合等。 函数和方法是Ruby的核心组成部分。你可以定义自己的...

    ruby中文教程,从基础到深入的让你学习ruby

    变量在Ruby中有四种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。数据类型包括字符串、数字、布尔值、数组、哈希等。控制结构包括条件语句(如...

    ruby中文文档中心资料

    类定义了对象的属性(或称为实例变量)和行为(或称为方法)。Ruby支持单继承,但通过模块,可以实现一种形式的多继承,即混入。模块可以包含方法和常量,可以通过`include`关键字将模块的方法引入到类中。 Ruby的...

    ruby语言帮助文档(简体中文)

    Ruby也支持变量(局部变量、实例变量、类变量和全局变量),以及常量。 2. **面向对象编程**:Ruby是彻头彻尾的面向对象语言,一切皆对象。每个变量都是一个对象,具有属性(或称为实例变量)和行为(方法)。Ruby...

    实例讲解Ruby中的五种变量

    在Ruby中,变量按照作用域和使用方式可以分为五种类型:全局变量、实例变量、类变量、局部变量和常量。 全局变量 全局变量是作用域最广的一种变量,在Ruby中,全局变量以美元符号($)开头。全局变量可以被程序中的...

    ruby中文教程(源代码)

    - 变量:Ruby支持五种变量,包括局部变量(`local`)、实例变量(`instance`)、类变量(`class`)、全局变量(`global`)和常量(`constant`)。它们各自有不同的命名规则和作用域。 - 数据类型:Ruby是动态类型...

    Ruby中文教程。。。

    1. 变量:Ruby中的变量分为局部变量、实例变量、类变量和全局变量,它们有不同的标识符和作用范围。例如,`$global`代表全局变量,`@instance`是实例变量,`@@class`为类变量,而`local_var`是局部变量。 2. 数据...

Global site tag (gtag.js) - Google Analytics