查询返回类型为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
相关产品推荐
相关产品推荐

