`

动态定义类变量和类实例变量

 
阅读更多
class Mine
  attr_accessor :some_var

  def intialize
    @some_var = true
  end

  def my_number num
    self.class.__send__(:attr_accessor, "my_#{num}")
    self.__send__("my_#{num}=", num)
  end
end

dude = Mine.new
dude.my_number 1
puts dude.my_1

#=> 1

#or
  def my_number num
     self.instance_variable_set "@my_#{num}", num
     self.class.class_eval do
        define_method("my_#{num}") { num }
     end
  end
#or
class Mine
  # ...
  def my_number num
    class << self
      attr_accessor "my_#{num}"
    end
    self.send("my_#{num}=", num)
  end
end



class Widget
  # class instance variable pattern
  class << self; attr_accessor :color; end

  def show_color()
    "This widget is #{self.class.color}"
  end
end
class WidgetR < Widget
  @color = "Russet"
end
class WidgetC < Widget
  @color = "Cordovan"
end
class WidgetL < Widget
  @color = "Liver"
end

WidgetR.new.show_color #=> "This widget is Russet"
#or
class A
  @count = 0
  @@count = 0
  def self.inherited(subclass)
    subclass.instance_eval { @count = 0 }
  end
  def self.num_instances
    @count
  end
  def self.num_subclass_instances
    @@count
  end
  def self.new
    @count += 1
    @@count += 1
    super
  end
end
class B < A
end
class C < B
end

A.new
B.new
A.new
B.new
B.new
C.new

A.num_instances #=> 2
A.num_subclass_instances #=> 6
B.num_instances #=> 3
B.num_subclass_instances #=> 6
C.num_instances #=> 1
C.num_subclass_instances #=> 6
分享到:
评论

相关推荐

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

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

    定义全局变量 变量 全局

    虽然严格来说它们不是真正的全局变量和函数,但由于CxxxApp类的实例在整个应用程序中是单一的,因此可以通过AfxGetApp()函数获取其指针,从而在任何地方访问这些成员。例如: ```cpp // Test.h class CTestApp : ...

    ios demo,自定义一个类,实例变量和成员变量的实现

    本示例“ios demo,自定义一个类,实例变量instance和成员变量的实现”旨在教授如何在Objective-C中创建自定义类并管理其实例变量和成员变量。 首先,我们需要理解什么是实例变量(instance variable,简称ivar)和...

    Java实例变量、类变量、局部变量

    实例变量,也称为对象变量或类成员变量,是定义在类中的非静态变量。它们没有使用`static`关键字修饰,并且是类的一个组成部分。当创建类的新对象时,这些变量会被分配内存,并且每个对象都有其独立的一套实例变量...

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

    在这个例子中,可以看到类变量`@@number`和`@@num`分别通过实例方法和类方法进行了访问。由于它们是类变量,所以不论是从实例还是类本身都可以访问到相同的值。 ##### 示例2:实例变量的使用 ```ruby class B @...

    java .定义一个复数类 complex ,它的内部具有两个实例变量:realPart和imagPart,分别代表复数的实部和虚

    在Java中,我们可以用两个`double`类型的实例变量来表示这两个部分。 ```java public class Complex { private double realPart; // 实部 private double imagPart; // 虚部 // 构造函数 public Complex...

    在MFC下如何定义全局变量和全局函数

    在MFC(Microsoft Foundation Classes)框架下开发应用时,全局变量和全局函数的定义与普通C++项目有所不同,因为MFC项目的结构更为复杂,通常由多个文件构成,直接在类外部定义全局变量可能会导致编译错误或者链接...

    Java类变量和方法.doc

    方法是类中的行为,分为实例方法和类方法(静态方法)。`static`修饰的方法是类方法,它在类加载时就被初始化,不依赖于类的实例,可以直接通过类名调用,但不能访问实例变量。实例方法则可以访问类变量和实例变量,...

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

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

    简单分析python的类变量、实例变量

    1、类变量、实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量。通常不使用self.变量名赋值的变量。类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的。 实例变量: ...

    VB 动态变量举例

    在VB(Visual Basic)编程语言中,动态变量是一种在运行时声明和使用的变量,与静态变量相比,它们不需要在程序的开头就明确声明其类型和名称。动态变量的使用为程序员提供了更大的灵活性,使得代码更加适应多变的...

    MFC中定义全局变量和全局函数的方法

    - 在应用程序类(如`CTestApp`)中,定义公共成员变量和公共成员函数。例如,在`CTestApp`类中添加`int Public_x;`和`void Public_f();`。 2. **实例化和使用**: - 应用程序类通常会自动实例化,因此无需显式...

    类中静态成员变量和普通变量的区别——实例代码(VS2010)

    在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...

    java变量命名心得

    实例变量是指在类内部定义的变量,但不在任何方法内部,它的作用域是整个类。 在上面的实例中,我们定义了一个名为 `Scope` 的类,该类有三个变量:`x`、`y` 和 `z`。其中,`x` 和 `y` 是实例变量,而 `z` 是静态...

    类变量_.htm.rar类变量_.htm.rar

    9. **this和super**:在类的成员方法中,`this`关键字引用的是当前对象的实例变量,而`super`关键字可以用来访问父类的类变量。 类变量的应用场景多种多样,比如计数器、配置参数、全局常量等。正确理解和使用类...

    Java成员变量类变量局部变量的区别共5页.pdf.zip

    Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。理解这些变量之间的区别是学习Java基础的重要部分,这对于编写高效、可维护的代码至关重要。 1. 成员变量...

    C++类变量声明

    3. **静态变量**:C++和Java都支持静态变量,但C++中的静态成员属于类本身,而非类的每个实例,而在Java中,静态变量也适用于类的所有实例。 4. **初始化**:C++允许在类声明中直接初始化成员变量,Java则需要在...

Global site tag (gtag.js) - Google Analytics