2016-07-09 6 views
0

Gibt es eine Möglichkeit, eine Eingabe an eine Netlogo-Prozedur so zu übergeben, dass der Wert der Eingabe innerhalb der Prozedur geändert werden kann? Zum Beispiel:Netlogo Prozedur Eingaben: Aufruf per Referenz möglich?

to test 
    let value 200 
    test2 value 
    print value 
end 

to test2 [v] 
    set v v + 1 
end 

Wenn Sie dies ausführen, wird es ausgegeben 200. Ich mag es in einer Art und Weise verändern (ohne globale Variablen zu verwenden und ohne Reporter Verfahren zu verwenden), um 201

die Ausgabe zu haben
+0

Nein, dies ist im Sprachdesign absichtlich verboten. –

Antwort

2

Sie können ein veränderbares Objekt wie ein Array oder eine Tabelle verwenden.

extensions [table array] 

to test 
    let _a array:from-list n-values 10 [0] 
    increment-aval _a 0 
    print _a 

    let _t table:make 
    let _key "key1" 
    table:put _t _key 0 
    increment-tval _t _key 
    print _t 
end 

to increment-aval [#a #i] 
    let _old array:item #a #i 
    array:set #a #i (1 + _old) 
end 

to increment-tval [#t #key] 
    let _old table:get #t #key 
    table:put #t #key (1 + _old) 
end 

Natürlich ist es besser, die Mutabilität nicht zu verwenden, wenn Sie nicht müssen.