«前の日記(2007-02-01) 最新 次の日記(2007-02-03)» 編集

Matzにっき


2007-02-02 [長年日記]

_ [Ruby] ユメのチカラ: Rubyで習作 添削

よしおかさんがRubyコードを書いてるっ。 私の中で評価が高い人がRubyを使ってるのを見ると、ちょっとうれしい。 増田さんがRuby使いはじめたのを見た時もうれしかったなあ。

で、当の吉岡さんのコードだが、ちょっと冗長な印象がある。 特に三回あるmakehashメソッド呼び出しの周辺がいかにも同じことの繰り返しである。

ここは

  • ハッシュ生成
  • ファイルオープン
  • ファイルのクローズ
  • 例外処理

などをぜんぶmakehashメソッドに詰め込んで、DRYで行こう。 本体部分はよくわからなかったので(手元にデータもないし)、手をつけてない。

で、結果はこんな感じ。テストしてないけど。

#!/usr/bin/env ruby

def makehash(path)
  h = {}
  open(path, "r") do |f|
    f.each do |line|
      line=line.chop
      h[line]=line
    end
  end
  h
rescue
  puts 'error ' + path.to_s
  exit
end

hash1 = makehash(ARGV[0])
hash2 = makehash(ARGV[1])
hash3 = makehash(ARGV[2])

hash1.each do |key, pkg|
  line = pkg.to_s + ', '

  line = line + if pkg == hash2[pkg] 
    "included,     "
  else 
    "not included, "
  end

  line = line + if pkg == hash3[pkg]
    "included\n"
  else
    "not included\n"
  end

  print line
end

_ [Ruby] kiwamu日記 - RubyConf 2006 の裏番組、RejectConf の実施形式メモ

昨年のRubyConfにおけるRejectConfレポート。

体力なくて出席しなかったんだよなあ。 出てればよかったかなあ。

_ 西川善司の3Dゲームファンのための「ロスト プラネット」グラフィックス講座

カプコムのMTフレームワークにおける種々の工夫。

っていうか、並列度をあげるための(私の知らない)テクニックの数々。 これって「普通」のコンピューティングには応用できないもんかね。 まあ、日常的なタスクにはそんなに並列度はないか。

_ [Ruby] YARVに手を入れる

どう逆立ちしてもtrunkがYARVであるのは間違いのない事実で、 いつまでもmatzrubyの箱庭で遊んでいても、世間様には貢献できない。

というわけで、意を決してtrunkに手を入れてみる。 あまり難しい(coreに大々的に手を入れる)ようなものは 手に負えなそうなので、とりあえず簡単なものから。

  • クラス変数の探索順序変更
  • Symbolをふたたびimmediateに

コア以外のソースコードは共通なので、意外と簡単。 で、コミットしてみた。

この後、

  • クラスローカルインスタンス変数
  • ローカル変数スコープの変更

も導入しよう。クラスローカルインスタンス変数には 命令の追加が必要になる。ちょっと手ごわい感じ(だけど、動いてるみたい)。

ところで、命令が追加されると tool/compile.rbでダンプされた命令が読み込めなくなるんだけど、 命令セットのバージョンとか付ける必要があるのかな。

本日のツッコミ(全1件) [ツッコミを入れる]
_ なかだ (2007-02-05 12:49)

maoeさんのいうように、hash1を直接foreachしたほうが順序が保存されるので嬉しいことがあるかも。<br><br># joinのあたりがやっぱり汚い…<br><br> pkgs = ARGV[1..-1].collect do |f|<br> pkg = {}<br> IO.foreach(f) {|line| pkg[line.chomp] = true}<br> pkg<br> end<br> IO.foreach(ARGV[0]) do |line|<br> line.chomp!<br> sep = ", "<br> puts line +<br> pkgs.collect {|pkg|<br> sep + if pkg[line]<br> sep = ", "<br> "included"<br> else<br> sep = ", "<br> "not included"<br> end<br> }.join<br> end

お名前:
E-mail:
コメント:
[]

«前の日記(2007-02-01) 最新 次の日記(2007-02-03)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.