理解smalltalk中的以下代码
Understanding the following piece of code in smalltalk
我正在尝试理解 smalltalk 中的以下代码
Character extend [
isGraph [
^ (Character space < self) & (self <= $~)
]
visible [
self isGraph ifTrue: [^ '$', self asString]
ifFalse: [^ self asInteger printStringRadix: 16]
]
]
基本上,该代码所做的是通过向其添加两个新函数来扩展字符的功能。 IsGraph returns 一个布尔值,但我不明白它的用途。您如何解释 (Character space < self) & (self <= $~)?。消息 space 以某种方式发送给角色,然后 returns 与 self 比较的东西,然后 self 与 $~ 比较。也有人可以解释 iftrue 块中符号 ',' 的含义吗?
欢迎使用 Whosebug。
首先,代码添加了两个新方法而不是函数,因为这是面向对象的编程。
当您将 space
消息发送到 Character
class 时,它将 return 您一个实例,如果 class 代表 space 字符。 isGraph
可能表示 "is graphical" 因为 ASCII table 中 space 之前的字符也没有图形表示(它们是 NULL、CR、ESC 等)作为 ~
之后的 DEL 字符。因此,使用 isGraph
,您可以检查 ASCII table.
上的字符是否在 space 和 ~
之间
visible
return 是字符的可见表示,并依赖于 isGraph
来决定是 return 实际字符还是它的整数 ASCII 表示。实际字符以 Smalltalk 的字符文字格式 returned,例如$a
用于字符a
,</code>用于字符<code>3
。字符串与 ,
消息连接。
其实Smalltalk的一大亮点就是易懂。因此,您应该始终能够调试一小段代码或查看消息的实现(例如 ,
在您的情况下)。但我怀疑您使用的 GNU Smalltalk 之类的东西缺少许多这些功能。
我正在尝试理解 smalltalk 中的以下代码
Character extend [
isGraph [
^ (Character space < self) & (self <= $~)
]
visible [
self isGraph ifTrue: [^ '$', self asString]
ifFalse: [^ self asInteger printStringRadix: 16]
]
]
基本上,该代码所做的是通过向其添加两个新函数来扩展字符的功能。 IsGraph returns 一个布尔值,但我不明白它的用途。您如何解释 (Character space < self) & (self <= $~)?。消息 space 以某种方式发送给角色,然后 returns 与 self 比较的东西,然后 self 与 $~ 比较。也有人可以解释 iftrue 块中符号 ',' 的含义吗?
欢迎使用 Whosebug。
首先,代码添加了两个新方法而不是函数,因为这是面向对象的编程。
当您将 space
消息发送到 Character
class 时,它将 return 您一个实例,如果 class 代表 space 字符。 isGraph
可能表示 "is graphical" 因为 ASCII table 中 space 之前的字符也没有图形表示(它们是 NULL、CR、ESC 等)作为 ~
之后的 DEL 字符。因此,使用 isGraph
,您可以检查 ASCII table.
~
之间
visible
return 是字符的可见表示,并依赖于 isGraph
来决定是 return 实际字符还是它的整数 ASCII 表示。实际字符以 Smalltalk 的字符文字格式 returned,例如$a
用于字符a
,</code>用于字符<code>3
。字符串与 ,
消息连接。
其实Smalltalk的一大亮点就是易懂。因此,您应该始终能够调试一小段代码或查看消息的实现(例如 ,
在您的情况下)。但我怀疑您使用的 GNU Smalltalk 之类的东西缺少许多这些功能。