阿木博主一句话概括:Smalltalk 语言中的反射基础:对象查询与类信息获取
阿木博主为你简单介绍:
Smalltalk 是一种面向对象的编程语言,以其强大的元编程能力和反射机制而闻名。本文将深入探讨Smalltalk 语言中的反射基础,包括对象查询和类信息获取。通过分析Smalltalk 的内部机制和API,我们将展示如何利用这些特性来增强程序的可扩展性和灵活性。
一、
在编程语言中,反射是一种允许程序在运行时检查和操作自身结构的能力。Smalltalk 语言通过其强大的反射机制,使得开发者能够轻松地查询对象和类的信息,以及动态地创建和修改对象。本文将围绕这一主题,详细介绍Smalltalk 中的对象查询和类信息获取。
二、Smalltalk 中的对象查询
在Smalltalk 中,每个对象都有一个唯一的类,类定义了对象的属性和方法。要查询一个对象的信息,我们可以使用以下几种方法:
1. `class` 方法
每个Smalltalk 对象都有一个 `class` 方法,它返回该对象的类。以下是一个简单的示例:
smalltalk
| anObject |
anObject := Object new.
(anObject class name) printNl.
输出:
Object
2. `classForName` 方法
`classForName` 方法允许我们通过类名来获取对应的类对象。以下是一个示例:
smalltalk
| aClass |
aClass := Class classForName: 'String'.
(aClass name) printNl.
输出:
String
3. `new` 方法
`new` 方法是类的一个实例方法,它用于创建类的实例。以下是一个示例:
smalltalk
| aString |
aString := String new.
(aString class name) printNl.
输出:
String
三、Smalltalk 中的类信息获取
在Smalltalk 中,类信息获取提供了对类属性、方法、父类和子类的访问。以下是一些常用的类信息获取方法:
1. `superclass` 方法
`superclass` 方法返回类的直接父类。以下是一个示例:
smalltalk
| aClass |
aClass := Class classForName: 'String'.
(aClass superclass name) printNl.
输出:
Character
2. `instanceVariableNames` 方法
`instanceVariableNames` 方法返回类中所有实例变量的名称。以下是一个示例:
smalltalk
| aClass |
aClass := Class classForName: 'String'.
(aClass instanceVariableNames) do: [ :name |
name printNl.
].
输出:
value
3. `methodNames` 方法
`methodNames` 方法返回类中所有方法的名称。以下是一个示例:
smalltalk
| aClass |
aClass := Class classForName: 'String'.
(aClass methodNames) do: [ :name |
name printNl.
].
输出:
```
asString
at:put:ifAbsent:
at:putAll:ifAbsent:
at:putSubrange:ifAbsent:
at:putSubrange:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
at:putAll:ifAbsent:from:to:
Comments NOTHING