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.
Questa è una risposta molto approfondita. – alex
Grazie. Penso che sia importante sapere quando si scrivono programmi Ruby. – Sigi