2014-04-28 14 views

risposta

23

In Ruby, le stringhe letterali vengono allocate come oggetti in memoria quando vengono rilevate. Se si concatena due stringhe letterali, come in

str = "foo" + "bar" 

sarà effettivamente allocare tre String oggetti: "foo", "bar" e il risultato della concatenazione (che è poi indicato con str).

Lo stesso accade se si fa:

"foo" << "bar" 

In molti casi, questo è solo un inefficienza mite che non si deve preoccupare troppo di.

Tuttavia, essere consapevoli che se si fa si che in un ciclo, e se l'aggregato String cresce grande, si allocare una sempre maggiore oggetto String ad ogni iterazione (si può evitare che raccogliendo le parti degli archi in Array, e quindi chiamando join quando hai finito, anche, foo << 'bar' modificherà foo sul posto, che è accettabile in un ciclo).

Utilizzando \ non concatenare oggetti intermedi, ma invece di presentare in modo efficace il parser con una sola String letterale (perché \ continua semplicemente la stringa sulla riga successiva).

L'idioma "foo" + "bar" + "baz" viene frequentemente utilizzato in Java, dove le stringhe sono immutabili e i letterali sono concatenati in fase di compilazione. (Ogni stringa letterale in Java viene solo memorizzato una volta e quindi riutilizzato in tutto il codice, Ruby non lo fa.) Inoltre, Java non ha modo migliore di continuare le stringhe su più righe, motivo per cui i programmatori Java lo fanno in questo modo.

+1

Questa è una risposta molto approfondita. – alex

+1

Grazie. Penso che sia importante sapere quando si scrivono programmi Ruby. – Sigi

4

\ alla fine di una riga impedirà all'interprete di trattare la nuova riga come fine della frase. Pertanto, è possibile creare una stringa multilinea senza il costo di concatenazione o di aggiunta.

Problemi correlati