«前の日記(2008年02月23日) 最新 次の日記(2008年02月25日)» 編集

ema log


2008年02月24日 [長年日記]

_ [最近]それにしても、厳しいなぁ

.htaccess で使えないディレクティブを書いただけで、Internal Server Error になるよ。

Ruby 1.8.6 と RubyGems を入れたつもりなんだけど、CGI から 使えてないかなぁ?環境変数が無視されるらしく、検索パスが足りなくなっていた。

$: << "hogehoge"

で対処。もっとマシな方法はないのか。

まぁ、そろそろ準備して、Kanasan.JS に行きます。名刺は作れずも、懇親会ないしいっか。

_ [Event][JavaScript] Kanasan.JS JavaScript第五版 読書会#3 にいってきた

7.5 配列 〜 8章 終わりまででした。

会場でメモりつつ参加。自分用メモと会場の話題が混在。後ほど整理して書き直したい。ようやく、何名かの方の顔と名前が一致してきました。

Class#method というのは Ruby の記法で、Class クラスの method メソッドという意味です。


Array#concat と Array#slice が非破壊的、残りは破壊的

Ruby みたいに ! の有無で区別できればいいのに。

そういえば、本書のサンプルは「;」抜けがあるという指摘が出ていました。


Array#slice

slice の第二引数に負数を指定できる。これは便利。省略すれば残り全部。


配列とオブジェクトの違い

length プロパティの挙動が違う。Array#length は書き換えることで配列長を変えられる特殊なプロパティ。

配列のようなオブジェクト、たとえば NodeList とは違う。


Array#toLocaleString

Array だと意味はないが、Date なんかのは便利そう。Object 全部が持ってることに意味があるんだろうな。

(new Date()).toLocaleString(); //=>"2008年2月26日 23:22:01"

手元の Firebug だと文字化けした。なお、サーバ移転の関係で現在 Syntax Highlighting ができません。


名前つき関数式について

nanto さんによると(不正確だったらすみません)

古いSafari と JScript なで挙動の違いがある。移植性を考えるなら、あんまり使わないほうがいいが、Firefoxの拡張を作る際に無名関数ではなく、名前をつけれるとデバッグしやすくなることがある。


ReadOnly なプロパティを上書きしようとしてエラーにならないのは不親切

例外とかWARNINGを発生させてほしい。例えば、Function#name や Function#length が ReadOnly なプロパティ。

>>> f = function foo( ) { };
foo()
>>> f.name
"foo"
>>> f.name = "bar"
"bar"
>>> f.name
"foo"

nanto さんいわく、SpiderMonkey の Strict モードだと Warning がでる。


Function のプロパティを static な変数として使う

p.137。yhara さん曰く便利。同感。

「uniqueInteger.counter は arguments.callee.counterでもいい。というか、この方が関数名を変えても安全だからより良いかも」という話があがっていました。


call と apply

引数の渡し方が違う。call は引数を並べる、apply は配列で渡す。

  • Kanasan 曰く、覚えにくい。
  • ujihisa 曰く、Array との文字列間距離。
  • yhara, はやみずさん 曰く、scheme 知ってたら apply は自然。
  • 個人的には、Ruby を知っていると call で引数が並ぶのは自然。

curry 化と部分適応の違い

curry 化
部分適応できる関数にすること。
部分適応
引数の一部を固定すること。

みたいな感じ。ちゃんと理解できていない。要調査。


p.142 の一番下の例でうまく動くのはなぜか

関数の引数自体は、新しい Activation / Call オブジェクトのプロパティになるから大丈夫。

this や arguments などはそうじゃないから変数(Activation / Call オブジェクトのプロパティ)を作って退避しないとだめ。


環境持ち運びのためのクロージャー

クロージャー = 処理+環境。

p.146 のブレークポイントの例では、後からある関数の環境を利用したいので、クロージャーを作っている。これは、その環境(Call / Activation オブジェクト)を直接取得できないから、クロージャーで間接的に持ち運んでいる。

Ruby だと Binding オブジェクトを取得しておいて、eval の第二引数 に指定することでも実現可能。環境の持ち運びという点では、こっちのほうが直接的でわかりやすい。

Call / Activation オブジェクトが取得できたらいいのになぁ。


ToDo: Firebug のプロファイラについて調べる

怪しいことを言ったので調べる。