ST80的变量可以分为两大类:私有变量和公有变量。

私有变量包括实例变量和临时变量两种。实例变量允许实例的所有函数(方法)访问,临时变量则是某一个函数的私有变量。一个类的子类的实例也可以访问实例变量。

公有变量则包括Class变量,全局变量和Pool变量三种。

Class变量允许一个类极其子类的所有实例访问。全局变量允许所有的类实例访问。 Pool变量则允许一部分的类的实例访问。

实例变量实例变量分为普通变量和索引变量两种。

普通变量跟其他语言类似,其初始化过程在实例被创建的时候进行,缺省为nil(五个保留变量之一),当然也可以明确指定。

索引变量的申明何访问的方式都与普通变量不同。实际上索引变量可以简单理解为一个可变长度的数组。通过at:at:put:(实际上是ST80的32个特殊函数之一)可以对其进行存取操作。例如:
var1 at: 1 获取索引变量的第一个值。
var1 at:2 put: ’abc’ 设置索引变量的第二个值为字符串对象’abc’。

为什么设计者会采用索引变量这样一个概念呢,或许我不应该胡乱猜测,但是我需要一个可以让我理解的理由。由于ST80只支持单一继承,所以很容易理解, at:和at:put:这两个函数在基础类Object中被定义。如果看一下Squeak的代码不难发现,这两个函数的实现是两个原语操作(primitive)代号为60和61。实际上我很不愿意看到Smalltalk这点小秘密,因为在我心中她是那样完美和谐的面向对象语言。但是毕竟我们目前还不得不面对不了冯·诺伊曼型计算机的这一现实。将机械语言的能力封装到合适的地方是不得已的选择。实际上,ST80的Array类的实现就是使用了索引变量,不过这一情况在Squeak中已经发生变化。虽然还不能完全肯定,但是我感觉Squeak中已经没有明确的索引变量这一概念了。或许在 ST80中,索引变量还是作为对象的一部分而实现的,在Squeak中,已经变成了独立的对象。如果事实也正如我所料的话,我将很高兴看到这一点,因为虽然只是形式上的变化,但是感觉却更加和谐了。

共享变量有三种,虽然名称不一样,实质上都可以看作是在smalltalk中被称为pool变量的这样一个东西,只不过其各自的作用范围不同而已。

Class变量和pool变量的访问方法跟普通的变量并没有什么差别,只是申明的地方不一样,如果看一下squeak的代码不难发现:
instanceVariableNames:用来申明实例变量。
classVariableNames:用来申明class变量。
poolDictionaries:用来申明pool变量。

而全局变量则通过Smalltalk这个特殊的保留变量名进行访问。其实质是一个哈希表。例如:

Smalltalk at: #var1 用来获取全局变量var1的值。
Smalltalk at:#var1 put: 1 则是将全局变量var1的值设为1。

本文是原创文章,转载请注明出处,谢绝商业目的的转载。

Smalltalk的变量相关推荐

  1. 山东大学面向对象笔记 整理

    //考试主要在设计模式,设计原则上考察较多,多看看老师ppt的类图,自己手动画画 //问答题: 四种多态变量形式,继承的八种,三种空间分配,多重单重继承优劣.... 第一部分  对象,类等基础概念 1 ...

  2. C++11_学习笔记

    Vector(std::initializer_list<double>)  //{1.2,12.3,111.2} 关键字virtual的意思是可能随后在其派生类中重新定义:含有纯虚函数的 ...

  3. 艾伦·凯与Smalltalk语言

    为什么80%的码农都做不了架构师?>>>    艾伦·凯与Smalltalk语言 您知道左面挂着图灵奖奖章的人是谁吗?他是世界上第二个面向对象语言--Smalltalk的发明人艾伦. ...

  4. 如何阅读Smalltalk程序

    本文简单介绍了Smalltalk语言的一些语法规则,Smalltalk语言中使用MVC模式来构建用户界面,即MVC模式是起源于Smalltalk语言的,不过Smalltalk的中文资料太少,这篇翻译文 ...

  5. 学点SmallTalk

    久仰SmallTalk的大名,大概是因为很多design pattern的名著都提到它,并且一说到OOAD也都会提到它老人家.但是我并不知道它是啥子东东,就像谁关心Ada一样. 但是出来混总是需要还的 ...

  6. 编程参考 - 编程中给变量起名时如何选择前缀,以及匈牙利命名法等

    我最开始当程序员用C语言写代码,公司里推行编码规范,变量的前缀都是有规定的. 比如整型变量,前面都是 u8Name, i8Name, u16Name, i16Name之类的. 尤其是嵌入式编程,涉及到 ...

  7. smalltalk语言介绍语法简单总结

    参考:https://www.jianshu.com/p/0aac0ba06808 最近在学习Object C,Object C很多特性继承了smalltalk语言的特性,所以先了解一下smallta ...

  8. [观点]为什么我喜欢Smalltalk?

    我认为作者说的很有道理 导读:本文是从<Why I love Smalltalk>这篇文章翻译而来,译文来自外刊IT评论<为什么我喜欢Smalltalk?>.Smalltalk ...

  9. java的smalltalk规则_Smalltalk 入门学习

    前言 为什么要学习 Smalltalk?Smalltalk 是一门历史悠久的语言,虽然如今我们几乎没有机会再去使用它,但它的不少开创性的理念,仍影响了许多现代的编程语言和思想.尤其是如今主流的面向对象 ...

最新文章

  1. 怎么用计算机弹出惊雷,会声会影闪电效果_怎么用会声会影绘制惊雷闪电地效果_飞翔教程...
  2. mysql if语句 oracle,Oracleifelse语句的写法实例
  3. latex强调/重音符号
  4. #pragma pack(push,1) #pragma pack(pop)
  5. xml 纯内容标签_Python小课堂XML 解析
  6. 星巴克又出事 被强制执行1087万!网友:欠租了吗?
  7. maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
  8. 详解java的构造方法
  9. 日志易——中国版的splunk
  10. Xshell6和Xftp6的使用
  11. 第四章: 元语言抽象
  12. 算法:找出1-10000之间的所有素数
  13. 只需98RMB Win7升级为专业版Win8
  14. [Python] 相关性分析
  15. checkboxlist控件用法
  16. 深入理解Video标签
  17. AD620仪表放大器介绍
  18. Live800:在线客服系统如何帮助企业创造持续的服务价值?
  19. 面积与弦长_Simplelife_新浪博客
  20. CLR/CIL/CTS/CLI/BCL/FCL

热门文章

  1. 浅谈服务器托管至IDC数据中心的优势
  2. 使用 SysRq 查看系统信息
  3. 安装和使用Hardinfo、Sysinfo、Lshw以在Linux上查找硬件规格
  4. 关于有限元应力结果精度的几点讨论
  5. 使用Github+Markdown搭键自己的笔记本
  6. Tech.ED North America 2008 Launch! (June 10-13,2008)
  7. Dojo官方教程:Charting
  8. WPS 中添加MathType插件
  9. IBM研究院院长:量子计算“大爆发”将在十年内到来
  10. Innodb存储引擎-idb文件格式解析