访问Smalltalk中的消息文档

时间:2018-08-20 15:00:00

标签: smalltalk gnu-smalltalk

在Smalltalk中定义类时,您可以访问文档注释,如下所示:

st> Integer comment
'I am the abstract integer class of the GNU Smalltalk system.  My
subclasses'' instances can represent signed integers of various
sizes (a subclass is picked according to the size), with varying
efficiency.'

但是,也许我是Smalltalk的新手,但是我找不到如何访问方法/消息文档的方法。即

1 个答案:

答案 0 :(得分:3)

让我们考虑以下方法

SomeClass >> #msg: arg
  "This is a comment"
  ^self doThisTo: arg

诱人的是要实现一种用于提取评论的服务,例如:

commentOf: aCompiledMethod
  ^method sourceCode readStream upTo: $"; upTo: $"

实际上,在上面的示例中,我们将获得字符串'This is a comment'。但是,问题在于双引号字符并不总是注释定界符。例如考虑以下方法

String >> #doubleQuoted
  ^'"', self , '"'

如果我们尝试使用上面的方法#commentOf:从该方法中提取评论,我们将会得到

' , self, '

没有任何意义。

这意味着我们的解析应该不那么天真。因此,我们应该问自己的问题是,使用我们环境的Smalltalk Parser是否更好?我不知道如何在gnu-smalltalk中执行此操作,因此让我在这里展示(作为示例)如何在Pharo中进行操作:

aCompiledMethod ast comments

#ast消息以该方法的抽象句法树(也称为 Parse Tree )进行回答,该方法公开了该方法的语法结构。源代码。特别是,它以CommentNode对象的形式检测所有注释,这就是#comments方法仅在于枚举所有语法分析节点同时收集注释的原因。