2009-12-03 127 views
1

我试图在Squeak中实现一个新类,出于某种原因,当我运行一个测试时,即使消息已定义,我也会收到MessageNotUnderstood错误。 类代码:构造函数未找到

Object subclass: #ClassAnalyzer 
instanceVariableNames: 'theClasses' 
classVariableNames: '' 
poolDictionaries: '' 
category: 'OOP3'! 

!ClassAnalyzer methodsFor: 'initialize-release' stamp: 'NK 11/30/2009 22:50'! 
initialize: setOfClasses 
theClasses := setOfClasses.! ! 

!ClassAnalyzer methodsFor: 'initialize-release' stamp: 'NK 11/30/2009 22:49'! 
newWith: input 
[input isKindOf: Collection] 
    ifFalse: [^ClassAnalyzer new: input]. 
^ClassAnalyzer new: (input asSet).! ! 

而这里的,我跑测试:

| abcd z | 
z:=1class. 
abcd:= ClassAnalyzer newWith: z. 

任何想法,我做错了吗? 我当前的理论是,因为当你调用构造函数时没有对象,所以它应该有点不同(也许应该有一个在Object或protoObject中具有相同名称的预定义函数),但如果这是交易,那么如何我们将会在不更改Object的情况下定义一个没有标准名称的构造函数吗?

回答

1

您应该在类一侧定义构造函数。在浏览器中有三个按钮[ instance ][ ? ][ class ],点击class按钮在课程端添加方法。完成后不要忘记切换回实例端。

0

注意,这条线你的很可能包含一个错误:

[input isKindOf: Collection] 
     ifFalse: [^ClassAnalyzer new: input] 

相反,你可能需要调用ifFalse上一个布尔值,让你使用的排序括号的错误。相反,这样做:

(input isKindOf: Collection) 
     ifFalse: [^ClassAnalyzer new: input] 

其余覆盖阿德里安(newWith:应该在类侧在Java中的说法,就叫做静态方法。)。