理解smalltalk中的以下代码段

时间:2017-11-16 03:51:09

标签: smalltalk

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

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

基本上,代码所做的是通过向其添加两个新函数来扩展字符的功能。 IsGraph返回一个布尔值,但我不明白它的用途。你如何解释(字符空间&lt; self)&amp; (自我&lt; = $〜)?不知何故,消息空间被发送到角色,并返回与self进行比较的内容,然后将self与$〜进行比较。还有人可以在iftrue块中解释符号','的含义吗?

1 个答案:

答案 0 :(得分:4)

欢迎来到StackOverflow。

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

当您将space消息发送到Character类时,如果该类表示空格字符,它将返回一个实例。 isGraph可能意味着“是图形的”,因为ASCII表中空格前面的字符没有图形表示(它们是NULL,CR,ESC等)以及后面的DEL字符{{1 }}。因此,使用~,您可以检查字符是否在空间和ASCII表上的isGraph之间。

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

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