我试图在Smalltalk的一个类中访问一个类变量.
我有两个类:Class1和Class2.
Class1具有以下变量:年月日小时分钟.Class2具有以下变量:start-time end-time.在Class2的initialize方法中,我有以下内容:
start-time := Class1 new. end-time := Class1 new.
现在我想将2012年分配给开始时间,如何在Class1对象的启动时间中访问year变量?
由于您new
要向类发送消息,我将假设您对实例变量感兴趣,而不是类变量(共享变量)(请参阅更新的Pharo示例中的 Pharo对象模型以了解差异).
在Pharo中,所有类/实例变量都是私有的,因此访问它们的方法是创建访问器.
添加到Class1方法
Class1>>year ^ year Class1>>year: aYear year := aYear
然后您可以使用适当的值将消息发送到类:
Class2>>initialize startTime := Class1 new. startTime year: 2012. "or by using a cascade" startTime := Class1 new year: 2012; yourself.
如果由于某种原因你需要访问没有访问器的变量,你可以使用元编程:
startTime instVarNamed: #year "meta-getter" startTime instVarNamed: #year put: 2012 "meta-setter"
最后,'start-time'
不是有效的变量名.