Search code examples
smalltalkpharo

Pharo: Refers to class name instead of "self class"


I have a simple class Amount with the fields value and unit and corresponding accessors. Now I want to create a class method for constructing amount objects like this:

value: aValue unit: anUnit
| amount |
amount := Amount new .
amount value: aValue ; unit: anUnit .
^ amount

I get the warning message Refers to class name instead of "self class". How can I improve this? I tried amount := (self class) new but then I get the error A Metaclass should only have one instance!. (Note that I am very new to Pharo and Smalltalk)


Solution

  • Refers to class name instead of "self class"

    is a hint, that suggests you use

    amount := self new.
    

    instead of

    amount := Amount new.
    

    As your method is a class method, self refers to the class.

    In a class method, (self class) new would (in your example) be the same as Amount class new. The class of a class (Amount) is a Metaclass, thus the error message you quoted.