| |
|
|
| Bisher wurden Arrays als Prozeduren-Parameter byRef statt byVal trasferimento, 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 trasferimento, ausgenommen man setzt ein @ vor den Variablennamen in der Parameterdeklarationsanweisung:
Standard, byVal:
Wenn byRef erwünscht (schneller):
Auf Parameter, die nicht vom Typ Array trasferimento werden, hat @ keinen Einfluss, jedoch wird die Prüfung per 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 @ per 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 per 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 per 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? |
|
|
| |
|
|