在Smalltalk中,如何在类B的实例中从类A中调用类B中的访问器方法?

时间:2015-04-18 01:36:58

标签: class smalltalk pharo

例如,在B班我有#setValue#getValue,但我不能在A班中使用这些。我该如何做到这一点?

编辑:

我认为可行的是ClassBInstance setValue:1.甚至ClassB ClassBInstance setValue:1.,但两者都没有。

2 个答案:

答案 0 :(得分:2)

在A类中创建一个实例变量     instanceVariableNames: 'binstance'

在类A中

创建initialize方法(实例方,即不是类侧)并确保以下代码片段在那里     super initialize. ... bInstance := ClassB new.

现在在ClassA使用的任何地方(即以任何方法)    bInstance setValue: 'whatever' 要么    myVar := bInstance getValue

在Smalltalk中的BTW常规设置和获取不使用...简单    setValue是value:    getValue是value 注意:

的差异

希望有所帮助

答案 1 :(得分:1)

Object subclass: #Foo  
    instanceVariableNames: ''  
    classVariableNames: 'e'  
    category: 'Example'

使用ctrl + s

保存

现在通过点击然后Refactoring->Class Var Refactoring->Accessors生成访问者,然后出现一个框接受它 去课堂边。将e方法修改为

Foo class>>e  
    e  isNil ifTrue: [ self e: 5] .  
    ^e.  

接受它。
现在再次定义一个新类(记得取消选中class side并转到实例端)。

Object subclass: #Faa  
    instanceVariableNames: 'a'  
    classVariableNames: ''  
    category: 'Example' 

保存。
现在再次通过右键单击类Faa然后生成访问器 Refactoring -> Class Refactoring -> Generate Accessors然后出现一个框,接受它。

现在转到Playground或Workspace运行这些命令

x := Faa new.   "right click on this and select doit"  
x a.            "right click on this and select print it"  
x a: Foo e.     "right click on this and select doit"  
x a.            "right click on this and select print it"  

你观察到变量值的差异。