Smalltalk 如何在未理解的消息中找到错误消息?

Smalltalk 如何在未理解的消息中找到错误消息?,smalltalk,pharo,Smalltalk,Pharo,我想找到触发MNU的消息的名称,我该怎么做 例如,如果我这样做 Transcript explode . 这将触发MNU,因为方法explode不存在,但我如何找到触发MNU的消息的名称是“explode”?如果我这样做,我会得到一个调试器。标题是 MessageNotUnderstood: ThreadSafeTranscript>>explode 当我选择第一个元素时,我会看到doesNotUnderstand:aMessage,其中aMessage是消息 [发言稿] on

我想找到触发MNU的消息的名称,我该怎么做

例如,如果我这样做

Transcript explode . 

这将触发MNU,因为方法explode不存在,但我如何找到触发MNU的消息的名称是“explode”?

如果我这样做,我会得到一个调试器。标题是

MessageNotUnderstood: ThreadSafeTranscript>>explode
当我选择第一个元素时,我会看到doesNotUnderstand:aMessage,其中aMessage是消息

[发言稿] on:MessageNotUnderstand do:[:ex | ex消息选择器]

异常的消息是消息的一个实例。它理解选择器参数等


请记住,异常是一种附带现象。当消息不被理解时,VM实际上会发送doesNotUnderstand:aMessage,而对象中的doesNotUnderstand:方法会引发异常。doesNotUnderstand:的参数是一条消息,其作用与异常中的相同。这意味着您可以在自己的类中实现自己的doesNotUnderstand:message,如果您有特殊要求。

哇,很好,谢谢您的回答:)我所要做的就是按照您的建议重写doesNotUnderstand:)不要太轻率地使用
#messageNotUnderstanding
。1.控制流可能变得难以跟踪和2。它是遍历类层次结构和所有异常处理程序后的最后一种手段,在某些情况下可能会很慢。我使用它将pharo代码解析为python代码,作为字符串,这样->Bpy数据对象:'Cube'位置:'(1.0 2.0 3.0)'将变成python字符串'Bpy.data.objects['Cube']。位置=(1.0 2.0 3.0)'然后python将其作为python代码执行。如果你有更好的选择,我洗耳恭听:)你可能想看看海边帆布是如何工作的。这是显式的,更容易调试@马克斯莱斯克有权利。限制应用元编程的范围