Smalltalk中#符号的含义及对应代码表达式真值判断
Smalltalk 中
#符号的作用与示例表达式结果说明 #符号的定义
Smalltalk中前缀#是符号(Symbol)字面量的标记:
- 符号是全局唯一、不可变的原子对象,只要字面量写法完全一致,在整个Smalltalk运行环境中永远指向同一个对象实例,通常用来做标识符、消息名、字典键这类场景
- 示例中的
#helloworld就是一个值为helloworld的Symbol类型对象 - 示例里的逗号
,是Smalltalk字符串的拼接消息,因此('hello','world')会在运行时动态生成一个内容为helloworld的String(普通字符串)类型实例。
示例表达式的求值结果
你给出的代码:
('hello','world') == #helloworld
最终求值结果为false,和你之前的判断逻辑一致:
- Smalltalk中
==运算符做的是对象同一性校验,只有两个操作数指向内存中完全相同的对象时才会返回true - 表达式左侧是运行时动态创建的String类实例,右侧是编译期就确定的全局唯一Symbol类实例,二者分属不同类,也不可能是同一个对象,因此结果必然为false。
补充说明:哪怕把同一性判断
==换成值相等判断=,这个表达式的结果依然是false——Smalltalk中类型不同的对象即使内容完全一致,默认的值相等判断也不会返回真,String和Symbol是两个完全独立的类。
内容的提问来源于stack exchange,提问作者base
相关产品推荐
相关产品推荐

