簡體   English   中英

Pharo 4.0中的類和實例變量和方法的語法

[英]Syntax for class and instance variables and methods in Pharo 4.0

我在線學習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.如果我想訪問上面的實例變量,我可以為類/實例添加訪問器方法,然后使用類實例/類對象實例調用它們。 那是對的嗎?

您將給予的任何幫助將不勝感激! 首先十分感謝。

我猜你有點誤解了方法語法,因為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:是方法的選擇器, userNameuserEmailuserPhone是參數。 您可以像在示例中一樣調用此方法。 nameemail是實例端變量的類側,具體取決於定義方法的位置。

此外,您不應該將類命名為CreateUser 想一想,這些實例會被稱為什么? “調用createUsers”? 通常您將類命名為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),您將獲得一個用於創建自動訪問者的對話框

@Rekha - 如果您發現這對您的學習很有用,請查看“ 更新Pharo By Example”一書。 (具體來說,'Pharo對象模型'一章,正是關於這個問題的主題 - 實例創建,類變量,繼承等)。 這本書正在進行中(我們正在更新舊的'Pharo by Example'一書,以引用Pharo的新版本),但仍然應該證明是有用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM