【问题标题】:What are Smalltalk pragmas conceptually?从概念上讲,Smalltalk pragma 是什么?
【发布时间】:2013-11-26 10:25:50
【问题描述】:

我在 Pharo Smalltalk 中使用了 pragma,并且对它们的工作原理有所了解,并查看了在 Pharo 中使用它们的示例。

我的问题是:

  • 从概念上讲,什么是 pragma,
  • 与其他语言中的构造进行比较,
  • 什么时候应该引入编译指示?

我已经找到了一篇关于他们历史的有趣文章:The history of VW Pragmas

【问题讨论】:

    标签: smalltalk pharo squeak visualworks


    【解决方案1】:

    您必须将其视为附加到 CompiledMethod 的注释,或者如果您想要附加属性。

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

    有很多可能性,由您来发明自己的元属性...

    编辑

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

    第三点也很难回答。在实践中,我会说你会使用一些已经存在的注解,但很少创建一个新的注解,除非你试图创建一个新的异常处理框架,或者一个新的 GUI 框架(你想注册一些已知事件或一些处理程序...)。我会看到的主要用途是扩展、组合具有不相关部分的应用程序,例如主菜单。与重写众所周知的方法 TheWorld>>mainMenu 的非常侵入性方式相比,引入 DECLARATIVE 挂钩似乎是一种相对非侵入性的方式。它也比在类初始化/卸载时通过传统消息发送立即注册/取消注册要轻一些。另一方面,魔法更隐蔽。

    【讨论】:

    • 我猜 Java 中的注解可以与 pragma 相媲美。它们也用于反射(例如用于 JUnit)
    猜你喜欢
    • 2014-03-23
    • 2020-05-06
    • 2014-03-09
    • 1970-01-01
    • 2023-03-22
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多