重箱の隅かしら? ― 2007年05月06日 05時01分58秒
「r : a」だと...
COLLECTION & COPYさんとこのエントリで次のようなコードが掲載されていた。
String.prototype.supplant = function (o) { return this.replace(/{([^{}]*)}/g, function (a, b) { var r = o[b]; return typeof r === 'string' ? r : a; } ); }; var template = '<table border="{border}">' + '<tr><th>Last</th><td>{last}</td></tr>' + '<tr><th>First</th><td>{first}</td></tr>' + '</table>'; var data = { first: "Carl", last: "Hollywood", border: 2 }; mydiv.innerHTML = template.supplant(data);Yahoo! Videoのコンテンツへリンクしていたが、どうもこれ、json.orgのこのページが元の模様。
中括弧で囲ったプロパティ名をパラメータとして渡したJSONデータのプロパティ値で置換するテンプレート機能を提供するメソッド定義みたいだが、このサンプルコードまんまだと、プロパティ値がstring以外の場合は元のテンプレートを採用するロジックになるので
<table border="{border}">(以下略)にしかならないんだけど。まぁ、試せばすぐわかるので、わざわざこんなエントリぶちあげなくてもいいんだけどね。。。
こっちのほうがJavaScriptらしいかしら?
しかし、この方法は思いつかなかった。このブログでも以前String.formatというエントリで、似たような(似てないか)機能を提供するメソッドを掲載したが、これはメソッドの引数の位置による置換という方法をとっていた。
もともとが.NET FrameworkのString.Formatメソッドの劣化エミュレートだからこういうアプローチだったのだが、考えてみれば複雑なリフレクションを駆使しなくてもプロパティ名→値の機械的な置換が実現できるので、このほうがJavaScriptっぽいのかもしれない。
もっとも、String.formatは、ゆくゆくはDate/Numberにもformatメソッドを実装して、
"本日は{0:yyyy年MM月dd日}です。".format( new Date() ); // ↑ '本日は2007年05月06日です。'とか、
"dara-jの小遣いは\{0:#,##0}です。".format( 3000 ); // ↑ 'dara-jの小遣いは\3,000です。'みたいなことをしたいんだけどね。
うぉっと、これ、別に
"本日は{d:yyyy年MM月dd日}です。".format( { d : new Date() } );とかってのでもいいのか。
相撲ネタ2発 ― 2007年05月06日 23時56分39秒
紙相撲って熱い
なんとはなしにテレビで「熱中時間」を見ていたら、紙相撲を紹介していた。
「親方」が主催する「部屋」に所属する「力士」達が、「横浜国技館」で取り組みを行い、「番付」を競うという、大相撲さながらのシステムで、なんと紙力士のレギュレーション(といってよいのかどうか)まで決まっており、一部抜粋すると以下のとおり。
身 長…踵から頭頂部まで6cm以内。髷を入れた総身長は6.3cm以内。
体 重…関取(十両・幕内力士)が1.5g前後、幕下力士は1.2g以下。
「日本紙相撲協会会則」より引用
wikipediaによると、昭和50年代から続く流れのようで、なかなかの伝統を誇る競技のようだ。
懇切丁寧な力士の作成方法などもあり、結構楽しめるコンテンツになっている。 しかし、テレビでみたところ、国技館にはマイクロカメラも取り付けてあるので、ぜひ動画の公開もしてほしいところである。
栃東、引退すか...
ここ数年、割と大相撲が好きだ。場所中は夜中にNHKが放送している「幕の内全取り組み」を欠かさず見る程度だが。
個人的にはロートル大関三人組(失礼!)の栃東、魁皇、千代大海が好きで、特に引かない相撲が魅力の栃東が一番のごひいきであったりする。
その栃東関が、明日引退発表をするという。しかも故障ではなく、脳梗塞の痕があったため、ということだ。
ここしばらくは故障やらなにやらで存分に力を発揮できなかったのに、こんな形で引退とは大変残念に思う。栃東関、お疲れ様でした。
「相撲」カテゴリ作成したので追加(2007.5.27)
最近のコメント