1 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 11:47:53 ] オブジェクト指向スクリプト言語Rubyについて扱うスレッドです。 Ruby Home Page www.ruby-lang.org/ja/ = 前スレ Rubyについて Part 29 pc11.2ch.net/test/read.cgi/tech/1193668038/ 過去スレ・関連スレは >>2-
409 名前:デフォルトの名無しさん [2008/02/07(木) 23:42:40 ] マクロはRubyの他の機能で代用可能ではないの? あった方が便利?
410 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:46:19 ] >>409 何したいのか判らんけど代用可能かどうかの判断つかないんなら聞いても意味無くない?
411 名前:デフォルトの名無しさん [2008/02/07(木) 23:47:38 ] 代用可能ではないと判断した。けど、詳しい人なら代用方法を知っているかもしれない。だから聞いている。
412 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:22:18 ] >>402 CGI::Session の移植ならあね。 moonrock.jp/~don/ruby/#ID-WEBRICK
413 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:23:15 ] 代用というからには用途による。 あらゆる用途で同じように使えるなら、それはその機能そのものだ。
414 名前:デフォルトの名無しさん [2008/02/08(金) 00:25:30 ] こういう用途には代用になる、と言えばいい。 すべてを網羅しなくても思いつくだけ述べてくれて構わない。
415 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:30:04 ] Schemeのマクロは文法拡張ができる。 Rubyでは文法拡張する方法はない。 でいいの?
416 名前:デフォルトの名無しさん [2008/02/08(金) 00:38:31 ] >>415 それは、例えば新しいif文を定義して、標準のif文と同じように使うことができるようになる、ということ? それが、Schemeでは出来て、Rubyでは出来ないと。正しい?
417 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:40:22 ] eval系列の命令でマクロっぽいことはできる。 attr_reader, attr_accessorもそれ
418 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:43:27 ] >>416 可能だが、どこまで自然になればOKなのかは使う人によるからな・・・ Rubyでも DSLは作られるが、 例えば、brainfu*k を再現するのは無理だろう
419 名前:デフォルトの名無しさん [2008/02/08(金) 00:50:38 ] lispってlispのソース上でbrainfu*kを再現できるの?()は出てこないの? インタプリタを作るならlispでもRubyでもできるよね。それとは違うの?
420 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:52:42 ] >>416 普通の関数なら関数を呼び出す時点で引数の評価は完了しているが、 マクロなら引数を評価するタイミングをマクロ側で制御できる。 ruby でオレオレif を作るなら、if/else の本体を Proc で包んで渡すしかない。 じゃないと オレオレif 関数を読んだ時点で if/else の本体が実行さてしまうから。 それか Proc のシンタックスシュガーであるブロックをうまく使ってごまかすか。 このサスペンダーの人の記事も参考に。 blog.livedoor.jp/dankogai/archives/50996734.html
421 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:52:43 ] >>418 my_if(proc { cond }, proc { then_clause }, proc { else_clause }) は「文法拡張した」とはさすがに言えないだろう
422 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 03:48:53 ] >>421 いや、だから人によるってば >>419 インタプリンタつくって、文字列を実行してという話ではなくね。 お得意のマクロとやらでできるんじゃないのかな? > Lisp DSLをよく作るとか聞いた いや、おれはLisp詳しくないのだが・・・ ちなみに、Io-language だとかなりそのものに近ずけることができる。マクロなしに
423 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 09:08:56 ] >>422 人による、って程度じゃないだろ。 >>421 が受け入れられるなら、cond、then_clause、else_clauseを文字列にして パーサ動かしてもいいってことか。
424 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 12:41:48 ] >>422 >標準のif文と同じように使うことができる が達成されてないじゃん。 これは主観ではなく客観で定義できる達成基準だぞ。
425 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:43:53 ] 揉めるなよ。 Matz的にはLispのマクロは「あまりに強力すぎる」ことに難があって、 Rubyをあえてそこまで行かせずにいるんだから。
426 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:46:10 ] Rubyでも構文木いじればけっこう何でもできるんじゃないかな PycoのRuby版もできるかもしれない。ParseTreeはどうよ
427 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 13:56:50 ] ところでバイトコードからデコンパイルってできんのかな。
428 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:23:10 ] Rubyの構文木ってすげー内部的でなかった? 生のポインタに触らずにいじれそう?
429 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 14:58:18 ] Ruby もそろそろ smalltalk みたいになんでもオブジェクトして欲しい。
430 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:38:16 ] >>424 はともかく >>423 静的言語ばかり使ってきた俺には、lambdaなどでif文作っても、 文法が拡張されているように見えるんだ。 たぶん経験の違いだと思う。
431 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 18:11:20 ] Ruby個人的には大好き・・・
432 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 19:41:11 ] Rubyまで「個人的に」とか断り付けなきゃいけないご時世か 普及したもんだなあ
433 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 19:44:40 ] 言ってることはよくわからんがとにかく凄い自信だ
434 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:14:52 ] Object.instance_methods が、1.8 だと String の配列で、1.9 からは Symbol の配列になるそうですが、 今まで MyClass.instance_methods.include?('methodname') としていたのを MyClass.instance_methods.include?(:methodname) としなければなりません。 1.8 と 1.9 の両方で使えるような書き方はありませんか。 arr = MyClass.instance_methods arr.include?('methodname') || arr.include?(:methodname) とか格好悪すぎる
435 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:21:03 ] .map{|m|m.to_s}
436 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:23:05 ] |m| って何の略?いや、気になったので
437 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 21:32:09 ] method names か何かだろ m 自体は method の m だと思う 「文字列かシンボルのどっち来るかわからん場合は to_s しとけ」という >>435 のアプローチは妥当
438 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 22:50:47 ] >>434 > 今まで MyClass.instance_methods.include?('methodname') としていたのを その書き方はそもそも効率が悪い。 MyClass.method_defined?(:methodname)
439 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 23:42:14 ] >>425 「Scheme(or Lisp)に有って、Rubyに無い機能」であることは事実。 それがいいとか悪いとか言うつもりはない。 >>426 標準で構文木いじる方法がないってこと。 ParseTree は既存の文法でパースしたプログラムをいじることは できても、既存の文法自体は拡張できない。
440 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 00:35:56 ] javascriptのfunctionって最高じゃない?シンプルで。 rubyのproc、Proc.new、lambdaって何なの?同じようなのいくつも作って。馬鹿なの?
441 名前:あ [2008/02/09(土) 00:37:38 ] pythonとRuby、そんなに変らん
442 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:01:24 ] ECMAScript系はいいもんだね サーバサイド実装も出て来てるし、今後RubyやPythonと比較されるユースケースが増えるかもなぁ。 現状では、利用形態がきっちり棲み分けてるから現実的に比べにくいかな。
443 名前:デフォルトの名無しさん [2008/02/09(土) 01:18:09 ] functionは長いからfunかfnか\がいい。
444 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:25:21 ] defで無名関数が定義できればいいのに。
445 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:27:43 ] lengthかlength()かで迷うのはもうごめんだお
446 名前:デフォルトの名無しさん [2008/02/09(土) 01:30:37 ] proc、Proc.new、lambdaを廃止して、全部defにしたら何か問題ある?
447 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:32:19 ] メソッドとクロージャは違う
448 名前:デフォルトの名無しさん [2008/02/09(土) 01:33:40 ] >>447 何が違う?具体的に。
449 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:35:02 ] def: メソッド proc、Proc.new、lambda:クローじゃ でいいのかな?
450 名前:デフォルトの名無しさん [2008/02/09(土) 01:36:23 ] >>449 だから、defでクロージャーも定義できるようにして何か問題があるかと聞いている。 現状がどうかなんて聞いていない。
451 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:37:43 ] >>448 ブロックの外のローカル変数が見えるかどうか あと無名関数なんて全然defineしてないのにdefって名前はさすがにどうかと
452 名前:デフォルトの名無しさん [2008/02/09(土) 01:40:06 ] >>451 じゃあ、proc、Proc.new、lambda、defをobsoleteにして、全部funcにしたら何か問題ある?
453 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:42:17 ] >>451 そんなこと言ったらlambdaなんて何の意味もない名前だろ。
454 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:45:08 ] そういえば proc,lambdaとProc.newじゃreturn等の挙動が変わるんだったな
455 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:46:30 ] 似て非なるものがゴチャゴチャあると紛らわしいから、functionにまとめてほしいな。
456 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:47:23 ] Ruby1.9って反面教師であるはずのPerlに怪奇しつつあるよな もっとシンプルで速度10倍くらい速くする方向に進歩して欲しい
457 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:54:05 ] 速度の話ではシンプルさよかeval捨てるか否かが優先されるかと。 そういや旧macromediaもeval捨てた矢先にActionScriptの速度上げたな
458 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 01:54:17 ] 関数が無い(ってことになってる)Rubyではfunctionってキーワードは採用されないだろうな
459 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:03:20 ] >456 の「怪奇」があながち誤字に見えないから困る
460 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 02:07:38 ] >>458 じゃあ、methodでいいよ。
461 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:05:24 ] 無名関数はスコープをどうするかが問題かな。 メソッド・Proc・ブロックを統一できればシンプルにはなるんだろうけど。 Rubyが将来シンプルになる見込みはないと思われるので、シンプルなサブセットを作って、 それに向けてYARVを最適化すればいいんじゃないかな。 組み込みクラスのメソッドの再定義を禁止するだけでも大幅に速くなると思うけど。
462 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:13:23 ] do [名前] [|パラメータ|] 処理 end が無名関数を返すようにして、 これでメソッド・Proc・ブロックを全部扱えるようにすればいい。
463 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:56:07 ] お。
464 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:57:51 ] ま。
465 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 04:29:01 ] ECMAScript や Python は public な(Rubyでいう)インスタンス変数が存在出来る。 そのお陰で、メソッドをあたかも クロージャの入った public 変数のように扱える。 Ruby のインスタンス変数は全て protected 。 インスタンスの public はメソッドにしか許されていない。 メソッドとクロージャはハッキリ分かれてる。 そのへんの思想の違いじゃないかな? Procとメソッドをシームレスに扱えるようにしても Python や ECMAScript みたいにはスッキリしないと思う。 むしろ妙なパラドックスに陥りそう。
466 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 05:56:04 ] > そのお陰で、メソッドをあたかも > クロージャの入った public 変数のように扱える。 kwsk gttkn
467 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:25:10 ] 例えば JavaScript ならこんな感じかな。 <script language="JavaScript"> function MyObject() { this.method1 = function() { return "Hello"; } } var obj = new MyObject(); var func = obj.method1; document.write(func()); function method2() { return "World"; } obj.method2 = method2; document.write(obj.method2()); </script>
468 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 08:40:45 ] Python でも色々出来るが、メソッドと関数の 微妙な違いに苦しむかも知れんな。 型も違うから「あたかも」としか言えない。 class MyClass1: def method1(self): return 'Hello' obj = MyClass1() func = obj.method1 print func() def method2(): return 'World' obj.method2 = method2 print obj.method2()
469 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 09:49:47 ] >>438 thanks
470 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 10:26:34 ] nukoup.nukos.net/img/13137.jpg
471 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:23:25 ] factorial = def f(n) 1 if n <= 0 n*f(n-1) if n > 0 end factorial(10) #=> 3628800 こんな感じにしたい。
472 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:32:26 ] 5.times factorial #=> 1 #=> 2 #=> 6 #=> 24 #=> 120 とか。
473 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 11:56:46 ] proc、Proc.new、lambda、defを区別する意味ってあるの? 初心者の漏れには、特にproc、Proc.newが よく分からない複雑怪奇なものにしか見えないんだけど;;
474 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:02:38 ] Yコンビネータ使うとか。
475 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 12:40:01 ] Yコンビネータは再帰のためのコンビネータであって、 lambdaの代わりにはならない。 procとlambdaは冗長ではある。Proc.newとは、似てるけど別物で、 まぎらわしいものがあれこれあるのはどうかという気はする。 (「Proc.new は、Proc#initialize が定義されていればオブジェクトの初期化の ためにこれを呼び出します。このことを除けば、proc と同じです。」) def は、確かに特別にそういうものがなくてもいいのかもしれない けど、そうしちゃうと、クラスの文脈(*)に、 class Foo (*) ここ def foo() …… end end 生にlambdaを書いて、それをModule#define_methodでインスタンスメソッド定義、 という、言語の内臓に触れるコードを書かせることになる。 class Bar define_method('bar', proc{ …… }) end こんな感じ。もしMatzがTOOWTDIを信奉してたらこうなってた、というか。
476 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:22:25 ] >>471 定義されたfはどこに行っちゃうんだ?
477 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 13:26:01 ] >>476 def〜endブロックのローカルスコープでいいだろ。
478 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:18:44 ] >>475 > procとlambdaは冗長ではある。Proc.newとは、似てるけど別物で、 > まぎらわしいものがあれこれあるのはどうかという気はする。 > (「Proc.new は、Proc#initialize が定義されていればオブジェクトの初期化の > ためにこれを呼び出します。このことを除けば、proc と同じです。」) バージョンによって違うのかもしれないが、ブロックの中からreturnした時の ふるまいが、Proc.newとprocは同じで、lambdaとは異なっている。 $ ruby --version ruby 1.9.0 (2007-12-03 patchlevel 0) [i686-linux]
479 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:21:06 ] 紛らわしい機能はobsoleteにしてほしいな。 同じことができるならどれかに集約してもらいたい。
480 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:28:56 ] そんなことをしたらmap vs collect論争ができなくなるじゃないか。
481 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:35:25 ] map/collectは元々Ruby以前からそれぞれの宗派が存在したらから別にいいよ。 でも、lambdaはともかく、proc、Proc.new、def endはRuby独自でしょ。 Ruby独自ならRubyの中で整理した方がいい。
482 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 16:57:03 ] >>475 >>478 で、 def が無ければメソッド定義が、えらい不格好なものになるし、 Proc.new, proc, lambda は似てるけど、それぞれ違うということが 示されてるのは無視?
483 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 17:18:50 ] Proc.new, proc, lambda はそれぞれ違うけど、 同じようなことしかしないから、集約した方がいいって話じゃないの。
484 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:00:09 ] > Procでreturnするとfooから抜けちゃって関数内関数として使えません(> <) > > def foo > boo = Proc.new do > 100.times do |i| > 100.times do |j| > if i == 50 && j == 50 > return > end > end > end > end > boo.call > p "foo" # 実行されず > end > > foo この例の場合、Proc.new なら駄目なわけだが、 lambda なら期待通り動く。 procがどちらのように動くかはバージョンによるらしい。 どちらかに絞れるのかな? これ。
485 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:03:37 ] そういう多段の脱出のために catch 。
486 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:04:47 ] lambda、proc、Proc.newの仕様ってそれぞれきっちり決められてる? リファレンスマニュアルにはあまり詳細に書いていないようだけど。 ソース読めとか言わないよね?
487 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:07:29 ] >>484 lambdaでも変わらない希ガス。 ruby 1.8.6 (2007-09-24 patchlevel 111) def foo boo = lambda do 100.times do |i| 100.times do |j| if i == 50 && j == 50 return end end end end boo.call p "foo" # 実行されず end foo
488 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:10:17 ] 言語使用もない糞言語,おまえらよく使う気になるよなあ(www
489 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:11:02 ] >>487 インデント崩さずにどうやって書き込むの?
490 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:11:24 ] >>489 全角スペース
491 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:14:12 ] >>489
492 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:17:16 ] $ cat hoge.rb def foo Proc.new{return"Proc.new"}.call return "foo" end def bar proc{return"proc"}.call return "bar" end def baz lambda{return"lambda"}.call return "baz" end p foo ; p bar ; p baz $ ruby --version ruby 1.9.0 (2007-12-03 patchlevel 0) [i686-linux] $ ruby hoge.rb "Proc.new" "proc" "baz" $ ruby18 --version ruby 1.8.6 (2007-12-02 patchlevel 5000) [i686-linux] $ ruby18 hoge.rb "Proc.new" "bar" "baz"
493 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:19:19 ] インデントてすと def foo bar
494 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:23:40 ] >>492 1.8.6では、Proc.new≠proc=lambda 1.9では、Proc.new=proc≠lambda ってこと? そもそも、returnに対する振る舞いの違いだけで、分けなければいけないようなものなのか?
495 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:33:28 ] なぜこうなるのかわかりません(> <) def foo Proc.new{1.times{return"Proc.new"}}.call return "foo" end def bar proc{1.times{return"proc"}}.call return "bar" end def baz lambda{1.times{return"lambda"}}.call return "baz" end p foo ; p bar ; p baz #"Proc.new" #"proc" #"lambda"
496 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:40:12 ] >>495 「どう」書いたら「どう」なることを期待してるわけ? 「なぜ」そうなるかはソースを見れば書いてある。
497 名前:495 mailto:sage [2008/02/09(土) 18:42:29 ] 1.timesをかましただけでlambdaの挙動が変わるのはなぜですか?lambdaなら returnしてもbazから返らないと教わったのにその通りになってません。
498 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:43:36 ] >>496 出たw 「「「「「「「「ソースを見れば書いてある」」」」」」」」
499 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:44:23 ] Proc.new{} == メソッドに渡すブロック
500 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:45:14 ] ソースったって、rubyという言語のインタプリタの単なる1実装のソースに過ぎないんだろ。 rubyがまともな言語なら言語仕様をきちんと示すべきなんだけどな。
501 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:45:26 ] 学生ってC#かjava使って宿題してんじゃないの? なんでこんなにわいてんの?新人がゆとりなだけか?
502 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:47:27 ] >>501 あーこのスレだけ見てるとわからんな
503 名前:デフォルトの名無しさん [2008/02/09(土) 18:48:37 ] ソースを見る人次第でどんな風にも動作するあいまいな言語っていらないよね。
504 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:49:39 ] もうブロック内でreturn使うの諦めようぜ バージョン間での非互換や、書き方による差異でゴチャゴチャになってるんだから
505 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:49:42 ] もとはPythonスレで出た流れを引き取った格好か
506 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:52:24 ] >>503 ソースにはあいまい性はないよ。書いてある通りに動くのだから。 問題は、作者が開発しているインタプリタのソースが唯一の厳密な仕様書になっていること。 まともな言語なら、ソースではなく初めに仕様書ありきであるべき。
507 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:53:45 ] >>505 ?? この話題を始めたのは俺だが、Pythonスレなんて見たこと無いが。
508 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:54:52 ] >>504 return関係は基本は一応「見たまま」なんだけどね 論理的に動作を追おうとすると変なことに
509 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 18:57:56 ] 言語仕様を決めて、それに従えば問題ないんだけどな。