2012-08-23 9 views
7

私はこの質問に来る:CoffeeScriptは一重引用符文字列で補間をサポートしていますか?

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

結果が、私は二重引用符で文字列を囲むとき、これはちょうど1を印刷#{param}

です。私もRubyでテストしましたが、その動作は同じです。しかし、これはCoffeeScript.orgのルールと矛盾します。

CoffeeScriptのゴールデンルールは「ただのJavaScript」です。

私はJavascriptで考えているので、単一引用符と二重引用符が平等に扱われます。私はRubyを頻繁に使用しません。なぜ誰かが説明できますか?

ありがとうございます。 CoffeeScript documentationから

+1

それが唯一の黄金律だ、それはそれはCoffeeScriptのソースレベルでのリストはJavaScriptが動作するわけではありません。場所には魔法があります。 –

答えて

11

"これは単なるjavascriptです"とは、それが基本的に通常のJavaScriptにコンパイルされており、全く異なるプログラミングパラダイムを取り、それをJavaScriptにコンパイルしようとはしません。 CoffeeScriptのようなデータタイプとして根本的に異なる基本的な構築物を導入することとは対照的に

JavaScriptはない文字列補間を有していない等、「不良品」、定型、不要な構文を回避主として関係します。 CoffeeScriptはこれを便利にRubyから引き継いでいます。一重引用符を無効にするだけで、補間を解釈しないで文字列を得るきれいな方法が得られます。

Do not take JavaScriptは、を意味します。これはJavaScriptです。それは風味/変種/兄弟です。それがアップ* *というJavaScriptを終了するに

+0

*文字列としてJavaScriptに*をコンパイルします。したがって、*ランタイム*オーバーヘッドはありません。おそらく、コンパイル時間のオーバーヘッドがあります。しかし、ルビーの場合と同様に、パフォーマンスの差はごくわずかですから、ダブルとシングルの方が個人的なスタイル/プリファレンスよりもパフォーマンスが優れています。 – Sukima

+0

"JavaScriptに文字列補間がありません"。最終的にはes6で行います。https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Template_literals :) – IonicBurger

13

ルビースタイルの文字列補間はCoffeeScriptの中に含まれています。 二重引用符で囲まれた文字列は、#{...}を使用して、補間値を可能に と単一引用符で囲まれた文字列リテラルです。

+3

一重引用符で囲まれた文字列は、Rubyにあるように実際はリテラルではありません。 JavaScriptでエスケープされる実際のバックスラッシュを必要とし、単一引用符で囲まれた文字列は、二重引用符で囲まれた文字列のように行動してなど、解釈し、\ nにバックスラッシュをエスケープ文字として扱います。 Coffeescriptは私には分かりませんが理由でこの動作を永続させます。 –

+1

これが答えになるはずです。リテラル文字列(シングルクオート)VS文字列(二重引用符)のルビー補間とは異なり –

関連する問題