A Day in the Life

2007-08-27

続・E4X

e.element.( function::attribute("state") == 'gas' )http://labs.gmo.jp/blog/ku/2007/08/firefoxe4xxpath.html

mozilla/js のソース読むとか Ku さん最高><。あとでなんかおごってください!(反対だろ)。んー、Firefox だと function という namespace が E4X で式評価するときに存在する?

で、AS3 の方はというと普通に

e.element.( attribute("state") == 'gas' )

で評価できた!Firefox で出来なかったから出来ないと思いこんでいたら…。AS3 の E4X の式評価の部分は with(xml_instance) { } みたいな感じで評価時の xml のインスタンスのメソッドが呼び出されるな。んで Firefox の時は this のインスタンスのメソッドが呼び出され、attribute メソッドが無いのでエラーる。

e.element.(console.log(toString()));

の結果が Firefox と AS3 だと違うのが面白いね。で、Firefox の渡ってくる xml インスタンスのメソッドを呼び出すには function ネームスペースをつけてやる必要がある、と。

// firefox で
e.element.(console.log(function::toString()));

だと Firefox とAS3 での E4X 実装は同じ結果を返す。ソースを読んだ訳じゃないので正しいかどうかは知らない。

最近のループ

marble 最高すぎるなぁ。

aero 切った

XP にしとけばよかった…。ダウングレードすべきかどうか。いや別に aero は良いんだけど、X60 だとデュアルディスプレイにすると半透明とかウニョつーのが無くなるのでそれならいっそということで。一日たつと外部ネットワークに繋がらなくなるのがなー。あー。UAC は別にオンで困ってないよ。

E4X

  1. XPath 最高!便利すぎ!
  2. E4X 便利!式も書けるし!XPath より見やすいし XPath イラネ
  3. E4X 微妙…。やっぱ XPath のほうがイイヤ…。

という誰しも辿る道(ぇー)。

で挙げられてる特定 attr を取り出す例だけど、これ attr が設定されてないとエラーになっちゃうんだよね。img の alt が無い場合とか。ku さんの例の XML をちょっと変えると

var e = 
  ヘリウム
  ナトリウム
  塩素Chrorine
  水銀quicksilver
;

console.log(e.element.( @state == "gas" ));
reference to undefined XML name @state

\(^o^)/

もちろん安易にこんな風に書いても

console.log(e.element.( @state && @state == "gas" ));
reference to undefined XML name @state

\(^o^)/

なんで AS3 で XML を XPath で評価できる実装がないんだよ!AS3 (Flash Player) はリフレクションが XML で返るので E4X で操作しようと思ってもめんどくてめんどくて…。

続き書いた

http://subtech.g.hatena.ne.jp/secondlife/20070827/1188193204

昨日の呑み

けっこんおめでとう!けっこんいいね!というはなしでした。ジェットン幹事おつ><

記事の一覧 >