大家先看下面代码:
class Person < Struct.new(:age)
def say_age
puts "say age: #{age}" if age != nil
end
def hello_age
puts "hello age: #{age}" if age!=nil
end
end
p = Person.new(30)
p.say_age
p.hello_age
p.age = 20
p.say_age
p.hello_age
输出是:
say age: 30
hello age: 30
say age: 20
hello age: 20
如果使用:
def say_age
puts "say age: #{@age}" if @age != nil
end
def hello_age
puts "hello age: #{@age}" if @age!=nil
end
那么什么都不输出,应为@age 为nil
如果使用:
def say_age
puts "say age: #{:age}" if :age != nil
end
def hello_age
puts "hello age: #{:age}" if :age!=nil
end
那么输出是:
say age: age
hello age: age
say age: age
hello age: age
:age 符号而已
ActiveRecord的低层有使用这种方式申明class
class ColumnDefinition < Struct.new(:base, :name, :type, :limit, :precision, :scale, :default, :null) #:nodoc:
..
..
..
end
文件:schema_definitions.rb
路径:%RUBY_HOME%\\lib\ruby\gems\1.8\gems\activerecord-2.0.1\lib\active_record\connection_adapters\abstract
分享到:
- 2007-12-21 17:33
- 浏览 2004
- 评论(2)
- 论坛回复 / 浏览 (2 / 2333)
- 查看更多
相关推荐
接下来,我们可以在另一个类中声明并初始化`Person`对象作为成员变量。例如,创建一个`Student`类,其中包含一个`Person`对象: ```java public class Student { private String id; private Person person; /...
这样,类A和类B就可以访问彼此的私有和保护成员,但需要注意的是,这可能破坏封装性,增加代码的耦合度。 ```cpp class A { friend class B; private: int a_private; }; class B { friend class A; private: ...
private成员变量只能在声明它们的类内部访问;protected成员变量在同一个包或子类中可访问;无修饰符的成员变量(包访问权限)只在同包内可访问。 3. **静态与非静态**: 静态成员变量属于类,而非实例。这意味着...
在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...
4. **初始化**:C++允许在类声明中直接初始化成员变量,Java则需要在构造函数中或使用`final`关键字实现。 5. **内存管理**:C++提供了更多的内存控制,如手动分配和释放内存(使用`new`和`delete`),而Java通过...
成员变量是定义在类中的变量,但不在任何方法、构造器或块内。它们与类的对象直接关联,每个对象都有自己的成员变量副本。当创建类的新实例时,会为这些成员变量分配内存。成员变量可以被类的任何方法访问,包括...
本示例“ios demo,自定义一个类,实例变量instance和成员变量的实现”旨在教授如何在Objective-C中创建自定义类并管理其实例变量和成员变量。 首先,我们需要理解什么是实例变量(instance variable,简称ivar)和...
在C++编程语言中,全局变量是在程序的任何作用域之外声明的变量,可以在程序的多个函数或类中被访问。它们在整个程序的生命周期内都存在,从程序开始执行到结束时保持其值。全局变量的使用有其优点,如共享数据和...
它们可以访问类的私有成员变量,也可以操作这些成员变量。在这个例子中,定义了一个成员函数`printVariable`,用于打印成员变量`myVariable`的值: ```cpp void printVariable() { std::cout ; } ``` 成员函数...
- **限制**: 不能访问类中的非静态成员变量或调用非静态成员函数。 #### 三、面向过程设计中的static关键字 在面向过程的编程中,`static`关键字也有其特殊的应用场景: **1. 静态全局变量** - **定义**: 在全局...
- **成员变量**:在类中定义的变量称为成员变量,它可以存储特定类型的值。如上面例子中的`String name`。 - **成员方法**:用于操作成员变量的方法称为成员方法,例如`getName()`和`setName()`。 ### 2. 继承的...
在Java编程语言中,成员变量是指定义在类中的变量,它们可以在类的方法、构造器或类的其他成员方法中访问和操作。成员变量的覆盖(有时会被误认为是“重写”)是理解Java继承机制的关键之一。本文将详细解释成员变量...
成员变量,也称为类变量或实例变量,是定义在类中的变量,但不在任何方法、构造器或代码块内部。这些变量与类的对象紧密相关,用来描述对象的状态或功能。 成员变量有两种主要类型:实例变量和静态变量。 1. 实例...
它们不能访问非静态成员变量,但可以访问静态成员变量。 5. 友元函数和友元类:可以访问类的私有和保护成员,增强类之间的交互。尽管不是成员函数,但它们与类的关系密切。 三、访问控制与封装 封装是面向对象编程...
成员变量可以在类的任何方法中访问,也可以在类的外部通过对象进行访问。 2. 局部变量(Local Variables): 局部变量是在方法、构造器或者块中声明的,它们的作用域仅限于声明它们的代码块。一旦代码块执行完毕,...
2. **公开成员变量**:公开成员变量是可以直接从类外部访问的数据成员。在易语言中,我们使用`变量`关键字声明它们,如: ```易语言 变量 加法结果, 乘法结果, 除法结果, 减法结果 ``` 3. **公开成员函数**:公开...
直接调用类方法量:class::attribute/function,无论是静态/非静态都可以,静态static:声明类成员或方法为 static,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外),静态成员属于类,不...