Fundering: anropa subrutin x från subrutin x

Tråden skapades och har fått 15 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • International user
  • 2005-01-22 21:20

Här är en lite kod som man kan fundera över. Att anropa subrutin x, när man befinner sig i subrutin x. Vilken funktion - och bugmöjlighet - tillför det?

sub()
on sub()
	display dialog "sub()"
	sub()
end sub
  • Oregistrerad
  • 2005-01-22 21:25

När slutar den nästla in sig i sigsjälv och kommer ut igen?

  • Medlem
  • International user
  • 2005-01-22 21:29
Ursprungligen av Pär:

När slutar den nästla in sig i sigsjälv och kommer ut igen?

Aldrig. Men: Om man klickar på 'Avbryt' i dialogen, avbryts exekveringen av scriptet. Men det är ju en helt annan fråga.

Nu blandar vi lite Volvo med Saab... Så att säga.

  • Medlem
  • International user
  • 2005-01-22 21:32

Klickar man på 'Avbryt' blir det ett script-error: 'Användaren avbröt'. Varför blir det Error?

sub()
on sub()
	try
		display dialog "sub()"
	on error msg
		display dialog msg
	end try
	sub()
end sub

du måste använda "my" eller "tell me" för att subrutinen skall titta en nivå "upp" så ditt exempel fungerar inte

men va fasen - det ska du du väl veta, du har ju just suttit och redigerat ett sånt script som jag skrev för en liten stund sedan

  • Medlem
  • International user
  • 2005-01-22 21:35
Ursprungligen av Richard Rönnbäck:

du måste använda "my" eller "tell me" för att subrutinen skall titta en nivå "upp" så ditt exempel fungerar inte

men va fasen - det ska du du väl veta, du har ju just suttit och redigerat ett sånt script som jag skrev för en liten stund sedan

Nej, så är det faktiskt inte. calling med my eller inte spelar ingen roll i detta fall.

Ursprungligen av Wire:

Nej, så är det faktiskt inte. calling med my eller inte spelar ingen roll i detta fall.

Det har du faktiskt rätt, i och med att det är en ren sub och man inte inte skickar några andra variabler, som i mitt tidigare exempel

ett användarframkallat avbrott är ett fel ur scriptets perspektiv.

  • Medlem
  • International user
  • 2005-01-22 21:38
Ursprungligen av Richard Rönnbäck:

ett användarframkallat avbrott är ett fel ur scriptets perspektiv.

Så är det tydligen. Men vad är andemeningen?

Ursprungligen av Wire:

Så är det tydligen. Men vad är andemeningen?

Jag har läst en förklaring av det där men jag kommer inte exakt ihåg detaljerna, men i korta drag så gick det ut på att det är det ska vara så.

  • Medlem
  • International user
  • 2005-01-22 22:03

Subrutin-rebus: Vad visar dialogen?

sub_1()
sub_2()
display dialog "slut "

--Subs
on sub_1()
	display dialog "sub_1()"
	sub_2()
	sub_2()
end sub_1

on sub_2()
	display dialog "sub_2()"
end sub_2
  • Medlem
  • Gävle
  • 2005-01-22 22:07
Ursprungligen av Wire:

Här är en lite kod som man kan fundera över. Att anropa subrutin x, när man befinner sig i subrutin x. Vilken funktion - och bugmöjlighet - tillför det?

Den typen av funktion brukar gå under benämningen "rekursiv"; det vill säga att den anropar sig själv. Buggmöjligheten som tillförs är naturligtvis att den aldrig upphör att exekveras, därför måste man vara noga med att funktionen inte _villkorslöst_ anropar sig själv, utan bara om vissa villkor har uppfyllts.

Bara för att ta ett exempel så kan en rekursiv funktion användas för att rita ut en lista med listor i, t.ex. ett trådat forum eller en outline. T.ex. om du vill lista alla kategorier, och inuti varje kategori lista alla underkategorier, och i dem lista varje underkategori till respektive underkategori (osv...). Där har du ett praktiskt användningsområde för en rekursiv funktion. Om en kategori inte har några underkategorier så anropar inte funktionen sig själv mer.

Törs vi gissa att Wire känner sig lite sysslolös ikväll?

  • Medlem
  • International user
  • 2005-01-22 22:23

:D... Tanten är på Tupperware-party. Och jag dricker "smyggroggar" med min PB.

Ursprungligen av Wire:

:D... Tanten är på Tupperware-party. Och jag dricker "smyggroggar" med min PB.

tja, burkar som burkar

  • Oregistrerad
  • 2005-01-22 22:32

Dialogen i sub(1) - gro
Dialogen i sub(2) - g
Dialogen i slut - ar

edit: ser ni ett g till så beror det på grogggen

1
Bevaka tråden