什么是Smalltalk术语?

什么是Smalltalk术语?,smalltalk,pharo,squeak,visualworks,Smalltalk,Pharo,Squeak,Visualworks,我在Pharo Smalltalk中使用了pragmas,了解了它们的工作原理,并看到了它们在Pharo中使用的示例 我的问题是: 布拉格在概念上是什么 与其他语言相比,它们的结构是什么 我应该什么时候介绍布拉格语 我已经找到了一篇关于它们历史的有趣文章:。您必须将其视为附加到已编译方法的注释,或者如果您想将其视为附加属性 然后,由于反射,一些工具可以遍历其他已编译的方法,收集带有特定注释(属性)的方法,并应用一些特殊处理,如构建菜单、首选项列表或其他UI,调用标记为#initializer

我在Pharo Smalltalk中使用了pragmas,了解了它们的工作原理,并看到了它们在Pharo中使用的示例

我的问题是:

  • 布拉格在概念上是什么
  • 与其他语言相比,它们的结构是什么
  • 我应该什么时候介绍布拉格语

我已经找到了一篇关于它们历史的有趣文章:。

您必须将其视为附加到已编译方法的注释,或者如果您想将其视为附加属性

然后,由于反射,一些工具可以遍历其他已编译的方法,收集带有特定注释(属性)的方法,并应用一些特殊处理,如构建菜单、首选项列表或其他UI,调用标记为#initializer的每个类方法,或者某些机制可能会将堆栈向后移动,直到方法标记为#exceptionHandler

有很多可能性,取决于你发明你自己的元属性

编辑

对于第二点,我不知道,它必须是一种可以枚举方法并可以为其附加属性的语言


第三点也很难回答。在实践中,我会说您将使用一些已经存在的注释,但很少创建新的注释,除非您尝试创建一个用于异常处理的新框架,或一个用于GUI的新框架(您希望注册一些已知事件或一些处理程序…)。我看到的主要用法是扩展、组成一个包含不相关部分的应用程序,比如主菜单。引入声明性钩子似乎是一种相对非侵入性的方式——与覆盖众所周知的方法World>>mainMenu的侵入性方式相比。它也比在类初始化/卸载时通过传统的消息发送强制注册/卸载要轻一些。另一方面,它的魔力有点隐蔽。

我想Java中的注释可以与pragmas相媲美。它们还用于反射(例如用于JUnit)