2013-04-22 25 views
8

Qual è la differenza in come Ruby inizializza una nuova stringa con doppi apici ("") rispetto a String.new? Ai fini della curiosità e sperimentazione, ho calpestato String#initialize:In che modo Ruby valuta le virgolette doppie (aka "") rispetto a String.new?

class String 
    def initialize 
    puts "I <3 bananas" # they're delicious! 
    end 
end 

Quello che sto cercando di capire è: perché sono questi due esempi diversi?

# Calling the String class directly, I can declare banana love! 
irb(main):054:0> String.new 
I <3 bananas 
=> "" 

# Using double quotes, this string is not as tasty :(
irb(main):055:0> "" 
=> "" 

Questo è fastidioso per la ricerca, perché ogni risultato di Google sembra essere focalizzata sulla sintassi di base di Ruby, e io non sono riuscito a trovare nulla nella documentazione di Ruby.

+1

Cosa succede se si sostituisce 'allocate' invece? –

+2

@RyanBigg Questo è un buon pensiero, ma non fa differenza. I valori letterali stringa vengono valutati e hanno il loro oggetto creato in fase di compilazione, ignorando sia 'initialize' che' allocate'. –

+0

@DarshanComputing, grazie! Sembra che dovrei hackerare e ricompilare Ruby dal sorgente per "" restituire il materiale di inizializzazione. Leggerò di più sui letterali. – amorphid

risposta

9

Secondo Matz: oggetti

String per letterali sono già stati creati in fase di compilazione, che è di gran lunga prima di ridefinire il metodo di inizializzazione. Gli oggetti singoli della stringa da valori letterali sono solo copia degli oggetti inizializzati e assegnati a . L'intero scopo del metodo di inizializzazione è di inizializzare gli oggetti appena creati, come suggerisce il nome. Non mi sembra che abbia bisogno di chiamare il metodo di inizializzazione (ridefinito) per i valori letterali delle stringhe , già inizializzati al momento della compilazione.

+0

Ovviamente, è così che funziona in quasi tutti gli altri linguaggi di programmazione. Gli unici due esempi che conosco che consentono il sovraccarico di letterali sono Ioke e Seph. –

Problemi correlati