"Warnung" bei rekursiver Ausführung eines Blocks

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

"Warnung" bei rekursiver Ausführung eines Blocks

Michael Paap
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: "Warnung" bei rekursiver Ausführung eines Blocks

Bert Freudenberg
Ist nur eine Warnung, kannst du getrost ignorieren :)

Um die zu vermeiden, kann man vorher ausdrücklich fak auf nil setzen.

- Bert -

On 12.10.2011, at 12:42, Michael Paap <[hidden email]> wrote:

> Hallo,
>
> ich versuche mich gerade mit Squeak 4.2 an einem einfachen Beispiel,
> übernommen aus VisualWorks:
>
> | fak |
>
> fak := [ :n | n = 1  
>    ifTrue: [1]  
>    ifFalse: [n * (fak value: n - 1)]].  
>
> fak value: 6.
>
> Dabei bekomme ich eine Warnung bzgl. der Verwendung von "fak" innerhalb des
> Blocks:
> "fak appears to be undefined at this point. Proceed anyway?"
> Nach Bestätigung funktioniert das Beispiel wie erwartet (abgesehen davon,
> dass die Ausgabe von PrintIt an die Stelle erfolgt, wo das Problem bemängelt
> wurde).
>
> Kann mir bitte jemand sagen, wie eine korrekte Umsetzung des Beispiels in
> Squeak aussehen würde oder mich an die Stelle schubsen, die ich lesen muss,
> um selbst drauf zu kommen?
>
> Gruß,
> Michael
>
> --
> View this message in context: http://forum.world.st/Warnung-bei-rekursiver-Ausfuhrung-eines-Blocks-tp3897533p3897533.html
> Sent from the Deutsch (German) mailing list archive at Nabble.com.
Reply | Threaded
Open this post in threaded view
|

Re: "Warnung" bei rekursiver Ausführung eines Blocks

Michael Paap
CONTENTS DELETED
The author has deleted this message.
Reply | Threaded
Open this post in threaded view
|

Re: "Warnung" bei rekursiver Ausführung eines Blocks

R. Baumann
Die "Warnung" kommt nur, wenn der Block deklariert wird: |fak|.
Das ist aber im Workspace nicht nötig.

R. Baumann
Reply | Threaded
Open this post in threaded view
|

Re: "Warnung" bei rekursiver Ausführung eines Blocks

Bert Freudenberg

On 17.10.2011, at 12:57, Michael Paap wrote:

> Am 17.10.2011 12:33, schrieb R. Baumann:
>
>> Die "Warnung" kommt nur, wenn der Block deklariert wird: |fak|.
>> Das ist aber im Workspace nicht nötig.
>
> Ah, ok. Ein einfaches
>
> fak := [:n | n = 1
> ifTrue: [1]
> ifFalse: [n * (fak value: n-1)]].
>
> tut es ohen Warnung. Kannst du mir eventuell auch erklären, welche Logi
> dahinter steckt?


Der Workspace deklariert Variablen automatisch bei der ersten Verwendung, ohne Warnung. Zumindest wenn "automatically create variable declaration" im Fenstermenü nicht ausgeschaltet ist. Vom selben Menü aus kann man auch die Workspace-Variablen inspizieren. Die behalten ja praktischerweise ihren Wert über mehrere Ausführungen hinweg bei.

- Bert -

Reply | Threaded
Open this post in threaded view
|

Re: "Warnung" bei rekursiver Ausführung eines Blocks

Bert Freudenberg

On 17.10.2011, at 13:15, Michael Paap wrote:

> Am 17.10.2011 13:02, schrieb Bert Freudenberg:
>
>> Der Workspace deklariert Variablen automatisch bei der ersten
>> Verwendung, ohne Warnung.
>
> Ja, das ist prinzipiell schon klar.
>
> Ich bin auch nur auf die Warnung gestoßen, weil wir dasselbe Beispiel
> für mehrere Smalltalk-Systeme verwenden wollten, und beispielsweise
> Smalltalk Express die explizite Deklaration verlangt.
>
> Mir erscheint es nur ein wenig seltsam, dass mich Squeak /nicht/ warnt,
> wenn ich die Variable weder deklariere noch initialisiere, aber meint,
> mich warnen zu müssen, wenn ich sie explizit deklariere, aber nicht
> initialisiere.
>
> Falls der dahinterstehende Gedankengang sein sollte
>
> "Wenn der User die Variable schon unnötigerweise explizit deklariert,
> wollte er sie sicher auch initialisieren und hat das wohl vergessen."
>
> dann kann ich das nicht so ganz nachvollziehen. ;-)


Aus Sicht des Compilers sind die Workspace-Variablen global. Somit brauchen sie weder deklariert noch initialisiert werden.

Die per senkrechter Striche deklarierten Variablen sind temporär. Diese sollten vor Verwendung initialisiert werden, deswegen die Warnung.

- Bert -