2012-08-23 5 views
7

io vengo a questa domanda:CoffeeScript supporta l'interpolazione nella stringa di quotatura singola?

f = (param) -> 
     console.info '#{param}' 
f(1) 

Il risultato è #{param}

Quando ho racchiudere la stringa tra virgolette doppie, questo basta stampare 1. L'ho provato anche in Ruby, il suo comportamento è lo stesso. Ma questo contraddice solo la regola in CoffeeScript.org:

La regola d'oro di CoffeeScript è: "È solo JavaScript".

Perché penso che in Javascript, le virgolette e le virgolette siano trattate allo stesso modo. E non uso spesso Ruby. Qualcuno può spiegare perché?

Grazie mille.

+1

È solo una regola d'oro in quanto termina * su * essendo JavaScript, ciò non significa che agisce nell'elenco JavaScript al livello di codice di CoffeeScript. C'è magia dappertutto. –

risposta

11

"E 'solo javascript" significa che compila fondamentalmente ordinaria JavaScript e non tenta di prendere una radicalmente diverso paradigma di programmazione e compilarlo a JavaScript. CoffeeScript si occupa principalmente di evitare "le parti danneggiate", lo standard di stampa e la sintassi non necessaria anziché introdurre costrutti di base radicalmente diversi come tipi di dati, ecc.

JavaScript non ha interpolazioni di stringa. CoffeeScript lo porta da Ruby per comodità. Disabilitarlo per le virgolette singole ti dà solo un modo pulito per ottenere una stringa senza l'interpolazione interpretata.

Non prendere E 'solo JavaScript a significare E' JavaScript. È un sapore/variante/fratello.

+0

Diversamente dall'interpolazione del rubino di una stringa (virgolette doppie) rispetto alle stringhe letterali (virgoletta singola) * compila * in JavaScript come stringa. Pertanto non esiste un sovraccarico * runtime *. C'è forse un tempo di compilazione in testa. Tuttavia, come nel rubino, la differenza di prestazioni è così trascurabile che l'uso del singolo o del doppio è più stile/preferenza personale, quindi prestazioni. – Sukima

+0

"JavaScript non ha interpolazioni di stringa". Finalmente lo fa in es6 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals :) – IonicBurger

13

Dal CoffeeScript documentation:

-stile Rubino interpolazione stringa è incluso nel CoffeeScript. Le stringhe con doppi apici consentono valori interpolati, utilizzando # {...}, e le stringhe con quotatura singola sono letterali.

+3

Tranne che le stringhe con quotatura singola sono * non * veramente letterali come lo sono in Ruby. In Javascript, le stringhe con quotatura singola si comportano come stringhe tra virgolette doppie e interpretano e trattano il backslash come un carattere di escape per \ n, ecc., Richiedendo l'escape dei backslash effettivi. Coffeescript perpetua questo comportamento per ragioni che non mi sono chiare. –

+1

Questa dovrebbe essere la risposta. –

Problemi correlati