理解smalltalk中的以下代码

理解smalltalk中的以下代码,smalltalk,Smalltalk,我试图理解smalltalk中的以下代码 Character extend [ isGraph [ ^ (Character space < self) & (self <= $~) ] visible [ self isGraph ifTrue: [^ '$', self asString] ifFalse: [^ self asInteger printStringRadix: 16]

我试图理解smalltalk中的以下代码

Character extend [
   isGraph [
      ^ (Character space < self) & (self <= $~)
   ]
   visible [
      self isGraph ifTrue: [^ '$', self asString]
                   ifFalse: [^ self asInteger printStringRadix: 16]
   ]
]

所以基本上,代码所做的是通过添加两个新函数来扩展character的功能。IsGraph返回一个布尔值,但我不理解它的用途。您如何解释字符空间 首先,代码添加了两个新方法,而不是函数,因为这是面向对象编程

当您向字符类发送空格消息时,如果该类表示空格字符,它将返回一个实例。isGraph可能意味着是图形化的,因为ASCII表中空格前面的字符没有图形表示,它们是NULL、CR、ESC等,以及~后面的DEL字符。因此,使用isGraph,您可以检查ASCII表中的字符是否介于空格和~之间

visible返回字符的可见表示形式,并依赖isGraph来决定是返回实际字符还是返回其整数ASCII表示形式。实际字符以Smalltalk的字符文字格式返回,例如,$a用于字符a,$3用于字符3。字符串与、消息连接在一起


实际上,Smalltalk的一个要点是可理解性。因此,您应该始终能够调试一小段代码或查看消息的实现,例如,在您的案例中。但我怀疑您使用的是GNU Smalltalk之类的东西,它缺少许多这些功能。

欢迎使用StackOverflow

首先,代码添加了两个新方法,而不是函数,因为这是面向对象编程

当您向字符类发送空格消息时,如果该类表示空格字符,它将返回一个实例。isGraph可能意味着是图形化的,因为ASCII表中空格前面的字符没有图形表示,它们是NULL、CR、ESC等,以及~后面的DEL字符。因此,使用isGraph,您可以检查ASCII表中的字符是否介于空格和~之间

visible返回字符的可见表示形式,并依赖isGraph来决定是返回实际字符还是返回其整数ASCII表示形式。实际字符以Smalltalk的字符文字格式返回,例如,$a用于字符a,$3用于字符3。字符串与、消息连接在一起


实际上,Smalltalk的一个要点是可理解性。因此,您应该始终能够调试一小段代码或查看消息的实现,例如,在您的案例中。但我怀疑您使用的是GNU Smalltalk之类的东西,它缺少许多这些功能。

谢谢@Uko的反馈。关于以下代码行,我还有两个问题:^self-asInteger printStringRadix:16。。。我知道你在smalltalk中向对象发送消息,但我不明白这里发生了什么。发送了多少条消息,两条还是一条?。是说将self作为整数返回并打印吗?@danreturn不是消息,它只是指定语句的类型。可以有两种类型:普通表达式语句和返回语句。然后语句的内容是self-asInteger printStringRadix:16。您将一个整数发送给self一个字符,并获取该字符的整数表示ASCII码。然后将printStringRadix:发送到接收到的带有参数16的整数,并返回以16为基数的整数的字符串表示形式。感谢@Uko的反馈。关于以下代码行,我还有两个问题:^self-asInteger printStringRadix:16。。。我知道你在smalltalk中向对象发送消息,但我不明白这里发生了什么。发送了多少条消息,两条还是一条?。是说将self作为整数返回并打印吗?@danreturn不是消息,它只是指定语句的类型。可以有两种类型:普通表达式语句和返回语句。然后语句的内容是self-asInteger printStringRadix:16。您将一个整数发送给self一个字符,并获取该字符的整数表示ASCII码。然后将printStringRadix:发送到接收到的带有参数16的整数,并返回以16为基数的整数的字符串表示形式。