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中以`@@`前缀表示,它们是属于类或模块的共享变量,不会被类的...
虽然严格来说它们不是真正的全局变量和函数,但由于CxxxApp类的实例在整个应用程序中是单一的,因此可以通过AfxGetApp()函数获取其指针,从而在任何地方访问这些成员。例如: ```cpp // Test.h class CTestApp : ...
本示例“ios demo,自定义一个类,实例变量instance和成员变量的实现”旨在教授如何在Objective-C中创建自定义类并管理其实例变量和成员变量。 首先,我们需要理解什么是实例变量(instance variable,简称ivar)和...
实例变量,也称为对象变量或类成员变量,是定义在类中的非静态变量。它们没有使用`static`关键字修饰,并且是类的一个组成部分。当创建类的新对象时,这些变量会被分配内存,并且每个对象都有其独立的一套实例变量...
在这个例子中,可以看到类变量`@@number`和`@@num`分别通过实例方法和类方法进行了访问。由于它们是类变量,所以不论是从实例还是类本身都可以访问到相同的值。 ##### 示例2:实例变量的使用 ```ruby class B @...
在Java中,我们可以用两个`double`类型的实例变量来表示这两个部分。 ```java public class Complex { private double realPart; // 实部 private double imagPart; // 虚部 // 构造函数 public Complex...
在MFC(Microsoft Foundation Classes)框架下开发应用时,全局变量和全局函数的定义与普通C++项目有所不同,因为MFC项目的结构更为复杂,通常由多个文件构成,直接在类外部定义全局变量可能会导致编译错误或者链接...
方法是类中的行为,分为实例方法和类方法(静态方法)。`static`修饰的方法是类方法,它在类加载时就被初始化,不依赖于类的实例,可以直接通过类名调用,但不能访问实例变量。实例方法则可以访问类变量和实例变量,...
在Ruby语言中,类实例变量、类实例方法与类变量和类方法是构成面向对象编程模型的重要组成部分。它们各自有不同的用途和行为特性,下面详细介绍这些概念的区别以及它们的使用场景。 首先,类实例变量和类实例方法都...
1、类变量、实例变量概念 类变量: 类变量就是定义在类中,但是在函数体之外的变量。通常不使用self.变量名赋值的变量。类变量通常不作为类的实例变量的,类变量对于所有实例化的对象中是公用的。 实例变量: ...
在VB(Visual Basic)编程语言中,动态变量是一种在运行时声明和使用的变量,与静态变量相比,它们不需要在程序的开头就明确声明其类型和名称。动态变量的使用为程序员提供了更大的灵活性,使得代码更加适应多变的...
- 在应用程序类(如`CTestApp`)中,定义公共成员变量和公共成员函数。例如,在`CTestApp`类中添加`int Public_x;`和`void Public_f();`。 2. **实例化和使用**: - 应用程序类通常会自动实例化,因此无需显式...
在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...
实例变量是指在类内部定义的变量,但不在任何方法内部,它的作用域是整个类。 在上面的实例中,我们定义了一个名为 `Scope` 的类,该类有三个变量:`x`、`y` 和 `z`。其中,`x` 和 `y` 是实例变量,而 `z` 是静态...
Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。理解这些变量之间的区别是学习Java基础的重要部分,这对于编写高效、可维护的代码至关重要。 1. 成员变量...
3. **静态变量**:C++和Java都支持静态变量,但C++中的静态成员属于类本身,而非类的每个实例,而在Java中,静态变量也适用于类的所有实例。 4. **初始化**:C++允许在类声明中直接初始化成员变量,Java则需要在...