2009-06-01から1ヶ月間の記事一覧

irb を使ってタイプライブラリを対話的にデバッグ

Microsoft Visual Studio から irb を起動したい。「プロジェクト」-「プロパティ」-「構成プロパティ」-「デバッグ」で設定する。 コマンド d:\Cygwin\usr\local\bin\ruby19.exe コマンド引数 -rwin32ole /usr/local/bin/irb19 Ruby は Cygwin 版 野良ビル…

タイプライブラリのメソッドのシンタックスを調べる

内容は「Win32OLE ことはじめ」から、そのままパクッただけなんだけど。 class WIN32OLE_METHOD def help "#{name}(#{__help_params__.join(', ')}) As #{return_type}" end private def __help_params__ params.map do |p| "#{'[in]' if p.input?}"\ "#{'[o…

irb から WIN32OLE を使うときのおまじない

WIN32OLE を使って Excel のファイルを開いているときに、うっかり irb を終了すると Excel のプロセスが残ってしまう。そこで、このおまじない。 $ irb -rwin32ole irb(main):001:0> excel = WIN32OLE.new 'Excel.Application' => #<WIN32OLE:0x1014ecd0> irb(main):002:0> at_ex</win32ole:0x1014ecd0>…

第34回 Ruby/Rails 勉強会 - 演習 3

演習問題のつづき。 バイナリサーチを再帰で実装してください。 class Array def bsearch(o, n = 0) return nil if empty? i = size/2 if self[i] == o i+n elsif self[i] > o self[0,i].bsearch(o, n) else self[i+1,i].bsearch(o, n+i+1) end end end a = …

第34回 Ruby/Rails 勉強会 - 演習 2

演習問題 のつづき フィボナッチ数を計算するプログラムをループ版と再帰版の両方を書いてください。 再帰版 def fibonacci(n) case n when 0 0 when 1..2 1 else fibonacci(n-2)+fibonacci(n-1) end end (0..8).each do |i| fibonacci i # => 0, 1, 1, 2, 3…

第34回 Ruby/Rails 勉強会 - 演習 1

第34回 Ruby/Rails 勉強会 の宿題。 疎な配列と同じデータを表現するハッシュを比較する。 以下のようにアクセスできるデータを作成して比較する。 a[0] # => 0 a[10] # => 10 a[90] # => 90 each すれば違いが分かる。 def dump(e) print e.class e.each{|i…

オブジェクトの順序

C++

オレオレクラスのオブジェクトを STL のコンテナに詰めたい。vector になら詰められるけど、set に詰めようと思ったら、オブジェクトの順序を決めないといけない。operator class Foo { ... public: bool operator<(const Foo& rhs) const { return id < rhs…

暗黙の型変換

Ruby は暗黙の型変換をしてくれない気の利かない言語だと言われるが、なかなかどうして結構型変換してくれる。例えばこんな感じ。 "%d" % "0xff" # => "255" # 16進数を 10進数に変換して再文字列化 "%s" % 0 # => "0" # C 言語なら SEGV もの 試しにオレオ…

オブジェクトの等値性

ややこしいのでメモ。 equal? ふたつの式が指すオブジェクトが同一か? == ふたつのオブジェクトの値が等しいか? eql? ハッシュキーが等しいかどうかチェックするために Hash クラスが使う。 === case 文の when で使われる。 =~ 正規表現のマッチ。 equal? a…

オレオレクラスを ostream に出力する

C++

C++ プログラミング入門 によると、print() というメンバ関数を作って、operator class Foo { ... public: void print(ostream* out) const { *out << value; } ... }; ostream& operator<<(ostream& out, const Foo& foo); なんで print なのか? なんで ost…

クラスの雛形

C++

class Foo { // constructor, destructor and ... public: Foo(int val = 0): value(val) {} ~Foo() {} Foo(const Foo& src); Foo& operator=(const Foo& src); // accessor int getValue() const { return value; } void setValue(int val) { value = val; …

O'Reilly から T シャツ届いた。

O'Reilly のキャンペーンで \4,000- 以上買うと T シャツがもらえる。最近の T シャツはイマイチだなぁと思いつつも、欲しい本があったので購入した。 シルエットクイズ Unix システムパフォーマンスチューニング TCP/IP ネットワーク管理 あとのふたつが分…

インデントと TAB の宗教論争

職場の大先輩が「インデントに TAB とスペースが混ったコードは困る」とボヤいておられた。Emacs 使いの私からすると、何が問題なのか理解できない。 大先輩:「そういうコードは (俺のエディタで開くと) インデントがグチャグチャになる。」 ひがき:「TAB 文…