D2NT Need expert help w/ function

05/26/2013 16:05 tonk1#1
German: Ich deklarier eine Variable und will sie in einer Funktion verwenden

NTTest.nt
Code:
function NTMain()
{
	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");
	NT_LoadConfig();
	NTA_Initialize();
	
	me.maxgametime = 0;
	var _test = "hallo"; // <-- die variable


	NT_Hallo(); // <-- funktionsaufruf
	
	while(true)
	{
		Delay(500);
	}
	
	NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}

function NT_Hallo() // <-- funktion
{
	Print(_test); // <-- hier wird _test verwendet
}
und bekomme folgenden Error: <D2NT Error> C:\Users\tonk\Desktop\D2NT 3.1\Muddy's\scripts\NTBot\bots\NTTest.ntj (28): ReferenceError: _test is not defined.
Warum bekomme ich diese Fehlermeldung?

English: In the above script I try to access the variable _test via the function NT_Hallo(), however on running the script it leads to an error: <D2NT Error> C:\Users\tonk\Desktop\D2NT 3.1\Muddy's\scripts\NTBot\bots\NTTest.ntj (28): ReferenceError: _test is not defined. Why does the error occur?
05/26/2013 17:30 bishibosh#2
Das funktioniert nicht, weil die Variable lokal für die Funktion NTMain() ist, ergo außerhalb derer nicht zugreifbar ist.
Schöner wäre es die Variable als Argument an die Funktion zu übergeben. Inetwa so:
Code:
function NTMain()
{
	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");
	NT_LoadConfig();
	NTA_Initialize();
	
	me.maxgametime = 0;
	var _test = "hallo"; // <-- die variable


	NT_Hallo(_test); // <-- funktionsaufruf mit Variable als Argument
	
	while(true)
	{
		Delay(500);
	}
	
	NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}

function NT_Hallo(msg) // <-- funktion
{
	Print(msg);
}
05/27/2013 01:33 tonk1#3
Quote:
Originally Posted by bishibosh View Post
Das funktioniert nicht, weil die Variable lokal für die Funktion NTMain() ist, ergo außerhalb derer nicht zugreifbar ist.
Schöner wäre es die Variable als Argument an die Funktion zu übergeben. Inetwa so:
Code:
function NTMain()
{
	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");
	NT_LoadConfig();
	NTA_Initialize();
	
	me.maxgametime = 0;
	var _test = "hallo"; // <-- die variable


	NT_Hallo(_test); // <-- funktionsaufruf mit Variable als Argument
	
	while(true)
	{
		Delay(500);
	}
	
	NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}

function NT_Hallo(msg) // <-- funktion
{
	Print(msg);
}
Nach alternativen Lösungen hatte ich gar nicht gefragt? Du denkst ja echt an alles. :p
Jedenfalls hatte ich das vorher schon so gemacht, mich aber gewundert, warum ich mit der in der Fragestellung genannten Methode nichts anfangen konnte.
Nachdem ich deinen Beitrag gelesen hab ist die Antwort wie der Blitz zu mir gekommen. Vielen Dank. ;)

Für alle die Lösung zur Fragestellung: Es geht nur auf dem Weg, wie bishibosh dargestellt hat.
Auf die Variablen der Funktion NTMain haben andere Funktionen nur mithilfe von Parameterübergabe Zugriff.


Kann geschlossen werden.
t/c
05/28/2013 11:04 Muddy Waters#4
Quote:
Originally Posted by tonk1 View Post
Für alle die Lösung zur Fragestellung: Es geht nur auf dem Weg, wie bishibosh dargestellt hat.
Auf die Variablen der Funktion NTMain haben andere Funktionen nur mithilfe von Parameterübergabe Zugriff.
Der Vollständigkeit halber muss ich widersprechen: Man könnte die Variable auch global deklarieren, dafür gibt es sogar zwei Möglichkeiten:
  1. Implizit, durch Weglassen des var-Statements - die Variable kann dann auch innerhalb einer Funktion (z.B. NTMain) deklariert werden und wäre trotzdem im globalen Kontext definiert:
  2. Explizit, durch Deklarierung mit var-Statement im globalen Kontext (d.h. außerhalb von NTMain):

Allerdings sollte man auf globale Variablen weitestgehend verzichten, sofern es auch andere Lösungswege gibt - die zuvor genannte Variante mit der lokalen Variable und Übergabe als Parameter ist also sauberer und daher in diesem Fall vorzuziehen. :)

#closed