Ruby

アクセス制御の抜け穴 (Python/Ruby編)

ある既存クラスの private なメソッドを外から使えるかどうかという話。他人の触れてはならないプライベートな領域に踏み入りたい! なんていう不埒な欲望が首をもたげて現れた時点で9割9分どっか不健全なわけで、すぐに首を洗って出直すか首を括って死ぬべき…

エラーモナド in Ruby

PHPの@演算子っぽいものをいじってたら Ruby でエラーモナドっぽいものができました。こんな感じで使えます。 result = try { parseint("hoge") }. catch(ArgumentError){ -1 }. catch{|e| puts e; -2 } res_value = result.value if result.good? begin/res…

PHPの@演算子的なもの

http://d.hatena.ne.jp/gnarl/20080820/1219226223例外かどうかを判断するのが誰であるべきかという話はおいといて、try-catch系の構文は、成功/失敗の二値が知りたいだけの場合でもあの長ったらしい構文を使わないといけないのがうざいなーとは常々思ってい…

eruby 再インストール

原因はよく分からないのですが、なんか突然 mod_rubyで動かしていたページが Internal Server Error を出すようになり、ログを見ると [Sat Jun 28 14:32:04 2008] [error] mod_ruby: error in ruby [Sat Jun 28 14:32:04 2008] [error] mod_ruby: (eval):45:…

matrixと整数

整数要素の行列で何も考えず Matrix#inv してたら、中で整数の割り算が使われてバグってた。require 'mathn' しておくと吉。

Queue

ただのQueueだと思って某コード読んでたら2時間ぐらいはまった。 まさかthreadライブラリの中で定義されてて、そんな動作するとは。面白いなー。

動的const宣言

こんなの作ったら def const(x) x.freeze end const char *a = "hoge"; ぽい感じで irb(main):004:0> const a = "hoge" => "hoge" irb(main):005:0> a[1] = "a" TypeError: can't modify frozen stringこういう風に書けるなぁ、と思った。 irb(main):006:0> …

Range#&

ここ経由で知った古い話題。 空区間をどう表現するかは議論の余地があると思うけど、 a & b & c とかやるならnilよりは放置かなぁ。 class Range def &(rhs) b = [self, rhs].max {|x,y| x.begin <=> y.begin } e = [self, rhs].min {|x,y| x.end <=> y.end …

蟹。

Canny http://canny.sourceforge.net/Ruby版Smarty。 次にWebアプリ作るときはコレ使ってみよう。