Stavo scrivendo codice per qualcosa di simile a un array con dimensioni variabili. Quello che faccio è mantenere una collezione lineare sottostante e avvolgerla con metodi di accesso all'indice. Poiché la dimensione della struttura dati non è nota, scrivo qualcosa comemetodo "aggiornamento" con indice di lunghezza variabile in Scala
def apply(i: Int*): Double = ...
E funziona perfettamente. Tuttavia, non posso fare la stessa cosa per aggiornare il metodo e gli operatori come + =, così finisco scrivendo metodi come
def set(v: Double, i: Int*) ...
def add(v: Double, i: Int*) ...
che va bene, ma non è quello che voglio. Immagino che il problema dell'aggiornamento possa essere risolto in due modi:
- Modificare l'ordine degli argomenti nella funzione di aggiornamento, il che lo rende strano.
- Consenti argomenti di lunghezza variabile non come l'ultimo. Trovo queste domande poste in un contesto generale e può essere risolto utilizzando le funzioni di curriculum, che non si applicano qui.
Il problema relativo a + = sembra più complicato e esiste persino quando l'indice è di lunghezza fissa. Forse possiamo aggiungere un oggetto che ha + = operatore e usare questo (...) per ottenere l'oggetto (in modo che questo (...) + = v invochi un metodo come ci aspettiamo), ma che entrerà in conflitto con il applicare il metodo.
Se qualcuno ha una soluzione a qualsiasi delle domande di cui sopra o ha un motivo per cui non dovremmo essere in grado di scrivere codice come questo, per favore condividi le tue idee! Grazie ~
Penso che questa sia gli sviluppatori Scala modo in cui implementare molte cose nella libreria di sistema, che sembra un po 'brutto per me ... Ma io non sanno di avere lo zucchero grammatica automaticamente genera + = operatore quando hai già applicato e aggiornato, che è una cosa utile da imparare. Grazie! – Kane