Smalltalk-80中←、≡、¬、≠、⌾、∢符号的含义及使用方法是什么?
Smalltalk-80专属特殊符号的含义与使用方式
以下符号均为Xerox Alto平台原生Smalltalk-80为适配自定义显示字体设计的专属语法,相关说明结合原生源码示例整理:
←(左箭头)- 含义:赋值运算符,等价于后续跨平台版本通用的
:= - 使用规则:中缀运算符,左侧为变量、实例属性等可赋值目标,右侧为待赋值的表达式,将右侧表达式的求值结果写入左侧目标。
- 示例对应:
strm frame ← <构造的矩形>即将右侧生成的矩形对象赋值给strm的frame属性neg ← <布尔判断结果>即将分支判断的返回值赋值给临时变量neg
- 含义:赋值运算符,等价于后续跨平台版本通用的
≡(三横线)- 含义:对象同一性判断运算符,等价于后续版本的
==,用于校验两个对象是否为同一个内存实例(而非值相等) - 使用规则:左结合二元中缀运算符,支持链式调用,返回布尔值。
- 示例对应:
^self class ≡ x ≡ false按左结合规则,先判断self的类与x是否为同一对象,再将得到的布尔值与false做同一性判断,最终返回判断结果。
- 含义:对象同一性判断运算符,等价于后续版本的
¬(逻辑非符号)- 含义:一元前缀运算符,对整数操作数执行按位取反操作(非布尔逻辑非)
- 使用规则:直接跟在整数操作数之前,对该整数的二进制位逐位取反,返回计算后的整数结果。
- 示例对应:
¬448即对数值448执行按位取反,后续将结果与0做不等判断。
≠(不等号)- 含义:不等判断运算符,等价于后续版本的
~=,用于判断两个对象不满足等值条件 - 使用规则:二元中缀运算符,返回布尔值。
- 示例对应:
mem ◦ ¬448 ≠ 0即判断内存索引取值的结果不等于0时,返回对应布尔值。
- 含义:不等判断运算符,等价于后续版本的
⌾(带圈点符号)- 含义:二维坐标点(Point类)构造运算符,等价于后续版本的
@ - 使用规则:二元中缀运算符,左右两侧分别传入x、y坐标值,直接生成对应的Point实例。
- 示例对应:
15000 ⌾ frame origin y即以15000为x坐标、frame对象原点的y值为y坐标,生成矩形左上角点20000 ⌾ frame corner y即以20000为x坐标、frame对象对角点的y值为y坐标,生成矩形右下角点,两个点后续通过Point的rect:方法生成完整矩形
- 含义:二维坐标点(Point类)构造运算符,等价于后续版本的
∢(角符号)- 含义:流(Stream类)对象的当前字符匹配判断方法,等价于后续版本的流字符检查方法
- 使用规则:针对流对象调用,传入待匹配的字符编码值,返回布尔值表示当前流指向位置的字符是否与传入编码匹配。
- 示例对应:
aStream ∢ 45即检查当前流的字符是否对应编码45(即连字符-),根据匹配结果走分支逻辑aStream ∢ 21即检查当前流的字符是否对应编码21(即¬符号)
注:以上示例均提取自Xerox Alto磁盘镜像中的原生Smalltalk-80源码,后续跨平台Smalltalk版本为兼容通用ASCII编码,均替换为等价的常规语法,不再使用这些自定义特殊符号。
内容的提问来源于stack exchange,提问作者Aaron Clark
相关产品推荐
相关产品推荐

