微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

方法未添加到 methodDict

如何解决方法未添加到 methodDict

据我所知,每次执行 "Obj compile: foo" 时,函数 foo 都会添加"Obj methodDict" 中,我尝试用一​​小段代码对其进行测试,我发现它并不总是添加...

是否有另一种方法可以找到 obj 已经编译的所有方法?像对象现在知道的所有方法一样吗?

解决方法

要获得更具体的答案,您应该提供用于测试的代码。我可以快速找到并且不会添加方法的一种代码路径是源代码编译失败时。此外,具有相同选择器的现有方法将被新编译的方法替换,因为同一个消息选择器在一个类中不能有两个方法。


要获取对象理解的所有消息选择器,您可以使用:

anObject class allSelectors

它还将包括在超类中实现的方法的选择器。

只获取在这个类中实现的选择器,而不是在超类中:

aClass selectors

要获取 CompiledMethods,您可以使用:

localMethods := OrderedCollection new.
aClass methodsDo: [:each | localMethods add: each].

allMethods := aClass allSelectors collect: [:each | aClass lookupSelector: each].

除了使用 methodsDo:,您还可以直接访问方法字典,就像您在测试代码中所做的那样,到目前为止您还没有向我们展示。


如果您正在寻找非脚本化的实用概述,您还可以使用协议浏览器或 Lexicon 工具。浏览您要查看其所有方法的类(使用系统浏览器),然后打开该类的弹出菜单并选择“浏览协议”。

System browser on the class "Class",popup menu to "browse protocol"

打开的新工具显示了该类及其所有超类的方法。您可以通过标有“仅通过”的按钮过滤到它所经过的超类。

Lexicon on the class "Class",showing methods through to the class "Behavior"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。