2014-12-05 18 views
1

在菲羅我想創建一個用於創建一個新的Person對象,並設置一個名字和年齡都在同一個方法,一個類的方法(兩個參數)類的方法,使一個物體從多個參數

Object subclass: #Person 
     instanceVariableNames: 'name age' 
     classVariableNames: '' 
     category: '...' 

不過我我無法訪問類方法中的實例變量。

name: n : age: a 
     "Class method that creates a Person Object and defines its name and age" 

     | person1 | 
     person1 := self new. 
     person1 name := n. "Unable to compile past this point due to red syntax highlighting 
     person1 age := a. 
     ^person1. 

我的目標是能夠調用:

aPerson := Person name: 'Pharo' age: '4' 

回答

6

你不能設置例如,從方法變量。

解決你的問題,你可以爲你的實例變量的訪問方法(實例上的側..),並呼籲那些從你的類側構造方法:

name: n age: a 
    "Class method that creates a Person Object and defines its name and age" 

    | person1 | 
    person1 := self new. 
    person1 name: n. 
    person1 age: a. 
    ^person1 

但爲了這個目的,通常一個單一的代碼實例方法來設置所有的變量並序它的名字與設置,其次是變量名:

setName: aString age: aNumber 
    personName := aString. 
    age := aNumber. 
    ^self 

現在你CON structor 方法是這樣的:

name: aString age: aNumber 
    ^self new setName: aString age: aNumber 
+1

,並有一個原因:人(類)是一個對象,人新的(實例)是另一個。在smalltalk中,實例變量是私有的,即使你是這個對象自己的類,你也不能直接改變另一個對象的實例變量......你必須通過發送消息來請求它 - 除非內省的基元可以做到這一點...查詢Newspeak如何解決這個問題。 – 2014-12-11 00:16:31

相關問題