Ask Your Question
1

Zakázání použití defaultního konstruktoru

asked 2014-12-15 19:44:56 +0100

uchytmat gravatar image

updated 2014-12-15 19:52:01 +0100

Miro Hrončok gravatar image

Ahoj, Smalltalk, Pharo. potřeboval bych vytvářet instance třídy hned s parametrem - to není problém, vytvořím si třídní metodu

ic: ic
^ self new
    ic: ic;
    yourself

Lze nějak znemožnit volání defaultního konstruktoru class new. mimo třídní metodu ?

Díky.

edit retag flag offensive close delete

1 Answer

Sort by » oldest newest most voted
1

answered 2014-12-15 20:43:45 +0100

MiB gravatar image

updated 2014-12-15 20:48:27 +0100

Metodu #new definuješ tak, že např. vyvolá výjimku:

new
    self error: 'Use #ic: to create new instances.'

A v metodě #ic: použiješ self basicNew initialize místo self new pro vytvoření nové instance:

ic: ic
    ^ self basicNew
        initialize;
        ic: ic

#basicNew je primitivní metoda pro skutečné vytvoření nové instance. Nově vytvořené instanci je nutné zaslat #initialize, protože to právě standardně zajišťuje metoda #new (je definována jako ^ self basicNew initialize), kterou v tomto případě obcházíš.

edit flag offensive delete publish link more

Comments

díky za vysvětlení.

uchytmat ( 2014-12-15 21:57:43 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-15 19:44:56 +0100

Seen: 160 times

Last updated: Dec 15 '14