| |
|
|
| Bisher wurden Arrays als Prozeduren-Parameter byRef statt byVal übergeben, also nur die Adresse statt eine Kopie. Das ist zwar schneller, kann aber zu unerwarteten Ergebnissen führen in einer leicht zu erlernenden Sprache.
Jetzt werden Arrays als Prozeduren-Parameter standardmäßig byVal übergeben, ausgenommen man setzt ein @ vor den Variablennamen in der Parameterdeklarationsanweisung:
Standard, byVal:
Wenn byRef erwünscht (schneller):
Auf Parameter, die nicht vom Typ Array übergeben werden, hat @ keinen Einfluss, jedoch wird die Prüfung für diesen Parameter auf eine Array-Kopie beim setzen des @-Zeichens abgeschaltet.
Bei Funktionen, bei denen es auf höchste Geschwindigkeit ankommt, ist also eine Optimierung per @ für jeden Parameter mit einzubeziehen.
Achtung:
Eine ähnliche Falle ist einfaches Zuweisen Array=Array:
var a b=[10 20 30]
a=b
a[0]=55
print b// zeigt 55,20,30 obwohl b syntaktisch nicht manipuliert wurde
Möchte man eine Kopie von einem Array für solch Zuweisungen, dann kann dafür die Funktion arr verwendet werden:
|
|
|
| |
|
|
|
HofK | Wenn @parameter in der Prozedurdefinition diesen Parameter als "At resse" -Schreibfehler bewußt- übergibt, also die Referenz auf den Parameter, sollte man meinen, dass a=b für arrays auch die Kopie von b nach a bringt und dann a=@b die Referenz übergibt. Damit bräuchte man hier kein arr().
Was spricht dagegen? Was übersehe ich dabei? |
|
|
| |
|
|