我在线学习Pharo并且不确定我是否正确创建类和实例变量的语法。如果我错了,请纠正我: -
在Pharo的类侧创建的类(静态)方法,其中name,email,phone是CreateUser类的实例变量:
createNewUser:Arguments name:userName email:userEmail phone:userPhone
要调用CreateUser类的静态方法,我将执行以下操作: -
CreateUser
name:userName
email:userEmail
phone:userPhone
如果我想用这个名称创建一个实例变量,那么方法声明将与上面完全相同,但它将在类的实例端。但是,当我调用该方法时,我将使用关键字“new”来调用它来创建一个新实例,如下所示:
CreateUser new
name:userName
email:userEmail
phone:userPhone
当我运行上面的代码并静态调用此方法时,我收到一条错误消息: -
MessageNotUnderstood: CreateUser class >>name:email:phone:
但是,当我去CreateUser类重新检查时,我看到上面的方法在类侧创建为:
CreateUser:name:email:phone:
我的查询如下: 1.上面我做错了什么?我该如何解决上述错误? 2.使用静态变量/方法与类变量/方法背后的概念 和Java一样吗? 3.如果我想访问上面的实例变量,我可以为类/实例添加访问器方法,然后使用类实例/类对象实例调用它们。这是对的吗?
您将给予的任何帮助将不胜感激!非常感谢提前。
答案 0 :(得分:9)
我猜你有点误解了方法语法,因为createNewUser:Arguments
部分没有意义。你应该拥有的是类方面的方法:
name: userName email: userEmail phone: userPhone
"and here you probably have something like:"
name := userName.
email := userEmail.
"and so on"
在我的示例中name:email:phone:
是方法的选择器,userName
,userEmail
和userPhone
是参数。您可以像在示例中一样调用此方法。 name
和email
是实例端变量的类侧,具体取决于方法的定义位置。
此外,您不应该为课程CreateUser
命名。想一想,这些实例会被称为什么? "调用createUsers&#34 ;?通常您将类命名为User,然后您可以将实例视为" users",然后类对象的责任是"来创建用户(其实例) "
请注意,在课堂上使用这样的方法很奇怪。你通常做的是创建一个实例方法:
initializeName: userName email: userEmail phone: userPhone
name := userName.
email := userEmail.
phone := userPhone
和课堂方法:
newName: userName email: userEmail phone: userPhone
| instance |
instance := self new.
instance initializeName: userName email: userEmail phone: userPhone.
^ instance
或使用级联消息的较短版本:
newName: userName email: userEmail phone: userPhone
^ self new
initializeName: userName email: userEmail phone: userPhone;
yourself
2)在Pharo(和Smalltalk)中,这个概念有点简单。由于一切都是一个对象,Class也是一个对象,所以类的副变量和方法是一个类的实例变量和方法,它是"类类"的一个实例。下一张图片可以帮助您理解Pharo中对象之间的关联:
这可能在开始时有点混乱,但最后,你没有静态/非静态方法/变量,你只需要对象,实例化和继承。
所以你应该考虑的是你要问的对象是什么。您可能会向用户询问有关它的电子邮件或手机号码,但您会要求用户类创建用户或查找用户,或者为用户建议默认的T恤尺寸。
3)是的,您应该创建一个访问者。此外,如果您在系统浏览器中选择一个类并根据您的操作系统按Cmd + H + A(或Ctrl或Alt),您将获得一个用于创建自动存取器的对话框
答案 1 :(得分:0)
@Rekha - In case you find this useful in your learning, take a look at the Updated Pharo By Example book. (Specifically, the 'Pharo Object Model' chapter, which is exactly about the topic of this question -- instance creation, class variables, inheritance, etc). The book is a work in progress (we're updating the old 'Pharo by Example' book to refer to the new version of Pharo), but should still prove useful.