我在Pharo Smalltalk中使用过pragma并了解它们是如何工作的,并且看过Pharo中使用它们的例子。
我的问题是:
我已经找到了一篇关于他们历史的有趣文章:The history of VW Pragmas。
答案 0 :(得分:14)
您必须将其视为附加到CompiledMethod的注释,或者您想要作为附加属性。
然后,由于反射,一些工具可以走其他编译方法,收集具有某些注释(属性)的方法并应用一些特殊处理,如构建菜单,首选项列表或其他UI,调用标记的每个类方法作为#initial,或某些机制可能会回到堆栈,直到方法被标记为#exceptionHandler ...
有很多可能性,由您来创建自己的元属性......
修改强>
对于第二点,我不知道,它必须是一种可以枚举方法的语言,并且可以为它们附加属性。
第三点也很难回答。在实践中,我会说你会使用一些已经存在的注释,但很少创建一个新的注释,除非你试图创建一个新的框架来进行异常处理,或者一个新的GUI框架(你想要注册一些已知的事件)或者一些处理程序......)。我将看到的主要用途是扩展,组成具有不相关部分的应用程序,如主菜单。这似乎是一种相对非侵入性的方式来引入DECLARATIVE钩子 - 与非常侵入性的方法来覆盖一个众所周知的方法TheWorld>> mainMenu。通过类初始化/卸载时的传统消息发送,它也比注册/取消注册要轻一些。另一方面,魔法更隐蔽。