smalltalk中new with argument的实现
Implementation of new with argument in smalltalk
我基本上想实现可以接受参数 e.x obj := SomeClass new: 'a'
的 new
。我试过这样实现
initialize: bdata
data := bdata
但这行不通。由于缺乏知识,我似乎犯了一些愚蠢的错误。我尝试 google 它但找不到任何示例。请帮忙。
您的代码太短,无法说明问题所在。一般来说,您应该使用 arg 进行初始化,如下所示:
initialize: arg
self initialize.
instVar := arg
然后你可以这样实现new:
:
new: arg
^ self basicNew
initialize: arg;
yourself
请注意 new
实现为 self basicNew initialize
,因此如果您从自定义初始化方法调用 initialize
,则不应在自定义中使用 new
新的,使用 basicNew
代替
在 Smalltalk 中,new
和 new:
不是关键字,而是常规消息。它们只是由对象的 class 实现的。要为对象的 class(而不是实例)编写方法,请单击系统浏览器中的 "class" 按钮。在那里,您可以实现您的 new:
方法。
但是请注意,命名您自己的实例创建方法通常不是一个好主意new:
。由于这是一个常规方法,您可以随意命名。例如,MyClass withBData: foo
。使它成为一个很好的描述性名称。它可能看起来像
withBData: bdata
| inst |
inst := self new.
inst bdata: bdata.
^inst
如果你需要在初始化方法中使用你的参数,你可以使用 basicNew 方法(正如 Uko 在他上面的回答中提到的)。
withBData: bdata
^ (self basicNew bdata: bdata) initialize
我基本上想实现可以接受参数 e.x obj := SomeClass new: 'a'
的 new
。我试过这样实现
initialize: bdata
data := bdata
但这行不通。由于缺乏知识,我似乎犯了一些愚蠢的错误。我尝试 google 它但找不到任何示例。请帮忙。
您的代码太短,无法说明问题所在。一般来说,您应该使用 arg 进行初始化,如下所示:
initialize: arg
self initialize.
instVar := arg
然后你可以这样实现new:
:
new: arg
^ self basicNew
initialize: arg;
yourself
请注意 new
实现为 self basicNew initialize
,因此如果您从自定义初始化方法调用 initialize
,则不应在自定义中使用 new
新的,使用 basicNew
代替
在 Smalltalk 中,new
和 new:
不是关键字,而是常规消息。它们只是由对象的 class 实现的。要为对象的 class(而不是实例)编写方法,请单击系统浏览器中的 "class" 按钮。在那里,您可以实现您的 new:
方法。
但是请注意,命名您自己的实例创建方法通常不是一个好主意new:
。由于这是一个常规方法,您可以随意命名。例如,MyClass withBData: foo
。使它成为一个很好的描述性名称。它可能看起来像
withBData: bdata
| inst |
inst := self new.
inst bdata: bdata.
^inst
如果你需要在初始化方法中使用你的参数,你可以使用 basicNew 方法(正如 Uko 在他上面的回答中提到的)。
withBData: bdata
^ (self basicNew bdata: bdata) initialize