方法未添加到 methodDict
Method isn't added to methodDict
据我所知,每次我执行 "Obj compile: foo"
时,函数 foo 都会添加到 "Obj methodDict"
,我尝试用一小段代码对其进行测试,然后我'我发现它并不总是被添加...
是否有其他方法可以找到obj 目前已编译的所有方法?喜欢对象目前知道的所有方法吗?
要获得更具体的答案,您应该提供您用于测试的代码。我可以快速找到并且不会添加方法的一个代码路径是源代码编译失败时。此外,具有相同选择器的现有方法将被新编译的方法替换,因为在一个 class.
中不能有用于同一消息选择器的两种方法。
要让对象理解所有消息选择器,您可以使用:
anObject class allSelectors
它还将包括在 superclasses 中实现的方法选择器。
只获取在此 class 中实现的选择器,而不是在超级 class 中实现的选择器:
aClass selectors
要获取 CompiledMethods,您可以使用:
localMethods := OrderedCollection new.
aClass methodsDo: [:each | localMethods add: each].
allMethods := aClass allSelectors collect: [:each | aClass lookupSelector: each].
除了使用 methodsDo:,您还可以直接访问方法字典,就像您在测试代码中所做的那样,但您现在还没有向我们展示。
如果您正在寻找非脚本化的实用概述,您还可以使用协议浏览器或 Lexicon 工具。浏览您想要查看其所有方法的 class(使用系统浏览器),然后打开 class 上的弹出菜单并选择“浏览协议”。
打开的新工具显示此class及其所有超class类的方法。您可以通过标有“仅通过”的按钮过滤到哪个 superclass。
据我所知,每次我执行 "Obj compile: foo"
时,函数 foo 都会添加到 "Obj methodDict"
,我尝试用一小段代码对其进行测试,然后我'我发现它并不总是被添加...
是否有其他方法可以找到obj 目前已编译的所有方法?喜欢对象目前知道的所有方法吗?
要获得更具体的答案,您应该提供您用于测试的代码。我可以快速找到并且不会添加方法的一个代码路径是源代码编译失败时。此外,具有相同选择器的现有方法将被新编译的方法替换,因为在一个 class.
中不能有用于同一消息选择器的两种方法。要让对象理解所有消息选择器,您可以使用:
anObject class allSelectors
它还将包括在 superclasses 中实现的方法选择器。
只获取在此 class 中实现的选择器,而不是在超级 class 中实现的选择器:
aClass selectors
要获取 CompiledMethods,您可以使用:
localMethods := OrderedCollection new.
aClass methodsDo: [:each | localMethods add: each].
allMethods := aClass allSelectors collect: [:each | aClass lookupSelector: each].
除了使用 methodsDo:,您还可以直接访问方法字典,就像您在测试代码中所做的那样,但您现在还没有向我们展示。
如果您正在寻找非脚本化的实用概述,您还可以使用协议浏览器或 Lexicon 工具。浏览您想要查看其所有方法的 class(使用系统浏览器),然后打开 class 上的弹出菜单并选择“浏览协议”。
打开的新工具显示此class及其所有超class类的方法。您可以通过标有“仅通过”的按钮过滤到哪个 superclass。