You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询返回类型为String的FAMIXMethod触发MessageNotUnderstood错误求助

解决FAMIX方法查询返回类型的问题

我来帮你搞定这个查询问题!你遇到的MessageNotUnderstood错误,根源是用错了方法——declaredType:是设置返回类型的setter方法,而不是用来判断当前返回类型的getter方法,直接在select:块里这么调用肯定会报错。

正确的查询写法

要筛选返回特定类型的方法,你需要用declaredType这个getter方法获取当前方法的返回类型,再和目标类型做比较:

self select: [ :each | each declaredType = String ]

针对FAMIX模型的额外注意事项

如果你的FAMIX模型里的类型是实体对象(不是Smalltalk原生类),可能需要先从模型中获取对应的类型实体再做比较:

| targetReturnType |
targetReturnType := self model entityNamed: #String.
self select: [ :each | each declaredType = targetReturnType ]

处理无返回类型的情况

如果有些方法没有声明返回类型,你可以加个非空判断避免空指针问题:

self select: [ :each | 
    each declaredType isNotNil and: [ each declaredType = String ]
]

为什么原来的代码会报错

declaredType:的作用是给方法赋值返回类型,它的调用形式是method declaredType: aType,用来修改方法的返回类型属性。你把它放在select:块里,既没有正确完成赋值的上下文,也没有返回select:需要的布尔值,自然会触发MessageNotUnderstood错误。

内容的提问来源于stack exchange,提问作者Merl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:12:36