【问题标题】:How is "self class" used? / How to query the Pharo image?如何使用“自我课程”? /如何查询Pharo图像?
【发布时间】:2010-09-27 13:39:12
【问题描述】:

调用“self class”有两个主要原因:要么是为了做用户空间的事情,比如调用静态方法、创建新对象或获取常量。或者是为了反省自己。我很想知道他们每个人发生的频率。

查询当前加载的 Pharo 代码库的最佳方法是什么?有内置工具吗,or should I use SOUL?

【问题讨论】:

    标签: smalltalk pharo


    【解决方案1】:

    打开浏览器,转到对象,选择#class 并点击“发件人”,将显示#class 的所有发件人。不过,这对于回答“每个事件发生的频率”并不是很好。

    以更易于操作的形式获取相同呼叫站点的方法是使用Object allCallsOn: #class,它提供了发件人的集合。也许运行一些#select: 调用来找出一些数字?

    或者使用重构浏览器:它有 FinderTool 之类的东西,可以根据 AST 结构进行搜索。

    编辑:正如 mathk 指出的那样,有时 senders-of 将不起作用,因为特殊消息或内联消息。在该主题的 vm-dev 列表中有一个有趣的discussion

    【讨论】:

    • 注意#class 可能是一个特殊的字节码。因此,您可能找不到带有“发送者”按钮的发送者,因为 CompiledMethod 中没有更多的#class 文字。我不记得是否是这种情况,但同样适用于内联发送 (#ifTrue:#ifFalse:, #and:, ...)
    • 这是一个好点,数学。查看 Squeak Trunk 中的 Object>>future 以获取另一个示例。这不是内联的,而是在编译时转换的(转换为 #futureDo:at:args 或 #futureSend:args:。另请参阅 Mariano Martinez Peck 最近对 vm-dev 的探索,用于 Squeak/Pharo 的 VM 和特殊发送。
    【解决方案2】:

    可帮助您自省系统中任何类/对象的内置工具有:系统浏览器、检查器和对象资源管理器。请参阅Squeak by Example 中的“在 Squeak 中开发”一章。您在那里找到的信息与 Pharo 相关。

    【讨论】:

      【解决方案3】:

      smalltalk 中没有静态方法。如果你不明白你不明白什么是类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        • 2020-09-27
        • 2020-02-21
        相关资源
        最近更新 更多