tl; dr:再利用可能なテンプレートをリテラルにすることは可能ですか?
私はテンプレートリテラルを使用しようとしましたが、私はそれを取得できなかったと思いますが、今はイライラしています。つまり、私はそれを理解していると思いますが、「それ」は、それがどのように機能するか、またはそれがどのように機能するかではありません。別の方法で取得する必要があります。
私が見たすべての例(タグ付きテンプレートを含む)では、「置換」は実行時ではなく宣言時に行う必要があります。これは、私にとってテンプレートにはまったく役に立たないようです。多分私は狂っていますが、私にとっての「テンプレート」は、作成時にではなく、使用時に置換されるトークンを含むドキュメントです。それ以外の場合、それは単なるドキュメント(文字列)です。テンプレートはトークンとともにトークンとして保存され、それらのトークンは評価時に評価されます。
誰もが次のような恐ろしい例を挙げています:
var a = 'asd';
return `Worthless ${a}!`
それはいいですが、もし私がすでに知っているならa
、私はただreturn 'Worthless asd'
かしreturn 'Worthless '+a
ます。ポイントは何ですか?真剣に。さて、ポイントは怠惰です。プラスが少なく、読みやすくなります。すごい。しかし、それはテンプレートではありません!私見ではない。そして重要なのはMHOだけです。問題は、私見ですが、テンプレートが宣言されたときに評価されるということです。
var tpl = `My ${expletive} template`;
function go() { return tpl; }
go(); // SPACE-TIME ENDS!
expletive
は宣言されていないため、のようなものが出力されますMy undefined template
。素晴らしい。実際、少なくともChromeでは、テンプレートを宣言することすらできません。expletive
定義されていないため、エラーがスローされます。テンプレートを宣言した後で置換を実行できるようにする必要があります。
var tpl = `My ${expletive} template`;
function go() { return tpl; }
var expletive = 'great';
go(); // My great template
ただし、これらは実際にはテンプレートではないため、これがどのように可能であるかはわかりません。私がタグを使うべきだと言っても、いや、それらは機能しません:
> explete = function(a,b) { console.log(a); console.log(b); }
< function (a,b) { console.log(a); console.log(b); }
> var tpl = explete`My ${expletive} template`
< VM2323:2 Uncaught ReferenceError: expletive is not defined...
これにより、テンプレートリテラルの名前はひどく誤っており、実際の名前は「ヒアドキュメント」と呼ぶべきだと私は信じるようになりました。「リテラル」の部分は私にヒントを与えたはずだと思います(不変のように)?
何か不足していますか?再利用可能なテンプレートをリテラルにする(良い)方法はありますか?
再利用可能なテンプレートリテラルを提供します。
> function out(t) { console.log(eval(t)); }
var template = `\`This is
my \${expletive} reusable
template!\``;
out(template);
var expletive = 'curious';
out(template);
var expletive = 'AMAZING';
out(template);
< This is
my undefined reusable
template!
This is
my curious reusable
template!
This is
my AMAZING reusable
template!
そして、ここに素朴な「ヘルパー」関数があります...
function t(t) { return '`'+t.replace('{','${')+'`'; }
var template = t(`This is
my {expletive} reusable
template!`);
...それを「より良く」するため。
それらがツイスティな感情を生み出す領域から、私はそれらをテンプレートの子宮と呼ぶ傾向があります。
<strike>
タグにテキストを挿入します。