2013-05-20 22 views
23

Ho visto questo operatore nel codice HAML. Mi chiedo a cosa serve.Cosa fa l'operatore unario punto interrogativo (?)?

vedo le seguenti opere:

> ?{ 
=> "{" 
> ?\s 
=> " " 
> ?a 
=> "a" 

E questo non funziona:

> ?ab 
SyntaxError: (irb):4: syntax error, unexpected '?' 

Quindi suppongo che ci vuole un personaggio un argomento e restituisce una stringa con quel personaggio.

domande:

  1. Cosa operatore fare?
  2. Quando si dovrebbe usarlo?
  3. Se crea solo una stringa di un solo carattere, perché è stata inclusa nella lingua? Non rompe l'ortogonalità della lingua? Qual è il vantaggio?
+0

* ortogonalità linguistica * in Ruby? Veramente? –

+0

@muistooshort bene, almeno tutto è classi e metodi. È vero che ha le sue aberrazioni (principalmente da perl) – fotanus

risposta

24

Restituisce una stringa di carattere singolo. È il modo più breve per scrivere un letterale stringa a singolo carattere. Usalo quando vuoi definire molte stringhe a singolo carattere. È un patrimonio di Ruby < 1.9, in cui veniva utilizzato per restituire il codice ASCII per quel personaggio. Non capisco cosa intendi per "rompere l'ortogonalità linguistica".

+0

Grazie sawa, puoi leggere sull'ortogonalità qui: en.wikipedia.org/wiki/Orthogonality_(programming) - da qualche strano motivo non è possibile creare un collegamento markdown con esso. – fotanus

+1

Ma in che modo un letterale di carattere interrompe l'ortogonalità mentre un array letterale, letterale di mappa, letterale stringa, letterale lambda, letterale intero, letterale simbolo, letterale float ecc. No? –

9

Non è un operatore, è un personaggio letterale. Tuttavia, non vi è alcun tipo di carattere in Ruby, quindi invece di un'istanza di un tipo di carattere, il carattere letterale valuta la "rappresentazione di default di un carattere". In Ruby 1.9+, che è un String di lunghezza 1, in Ruby 1.8, è un Fixnum che indica il codice Unicode del personaggio.

+0

Hai una fonte per la citazione "rappresentazione predefinita di un carattere"? –

2

Re # 2, un posto che ho trovato utile è nel trasmettere che un parametro che sto impostando o il valore che sto testando è inteso essere un singolo personaggio e non solo che questo è accaduto per essere semplicemente un corda corta. È una cosa di leggibilità/documentazione sottile, ma vale la pena considerare per i manutentori successivi (incluso me stesso).

Problemi correlati