2

当您在 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 的新手,但我找不到如何访问方法/消息文档。IE

4

1 回答 1

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消息以方法的抽象语法树(也称为解析树)进行回答,公开方法源代码的语法结构。特别是,它检测CommentNode对象形式的所有注释,这就是为什么该#comments方法仅包括在收集注释时枚举所有解析节点。

于 2018-08-22T00:20:26.700 回答