documentazione AppleScript suggerisce il seguente codice per costruire in modo efficiente un elenco:Come si costruisce in modo efficiente un elenco all'interno di un gestore in AppleScript?
set bigList to {}
set bigListRef to a reference to bigList
set numItems to 100000
set t to (time of (current date)) --Start timing operations
repeat with n from 1 to numItems
copy n to the end of bigListRef
end
set total to (time of (current date)) - t --End timing
Si noti l'uso di un riferimento esplicito. Questo funziona bene al livello più alto di uno script o di un gestore di corsa esplicito, ma se si esegue lo stesso codice esattamente parola per parola all'interno di un altro gestore in questo modo:
on buildList()
set bigList to {}
set bigListRef to a reference to bigList
set numItems to 100000
set t to (time of (current date)) --Start timing operations
repeat with n from 1 to numItems
copy n to the end of bigListRef
end
set total to (time of (current date)) - t --End timing
end buildList
buildList()
si rompe, producendo un messaggio di errore che dice, "può 'fare bigList nel tipo di riferimento. " Perché questa interruzione e qual è il modo corretto di creare in modo efficiente una lista all'interno di un gestore diverso da run()?
Questo stesso problema si verifica (senza una risposta soddisfacente) qui: http://stackoverflow.com/questions/3569847/why-cant-applescript-make-firstvalue-of-hash-into-type-reference-in-this -test-c? rq = 1 – 108
E più utile è questo: http://stackoverflow.com/questions/15777321/why-in-applescript-cant-you-declare-references-to-variables-local-to-handlers – 108