自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。
Ruby言語やLinuxのネタが多いです。
September 26, 2003 [おもひで]
■ [Ruby] ObjectPool
Ian A. Marsmanという人が、使ったよー、というメールをくれた。
DBのコネクションプール用に使っている模様。2001/12/30にリリースして、2年掛けでユーザ登場(^^;)。
■ で、ちとコードを読み直してみたんだけど、これ、クラスじゃなくてモジュールの方が良いかなぁ。2年ぶりに手を入れるべきか...。
def match_first(a, b)
ret = ""
(0...a.size).each do |i|
break unless a[i] == b[i]
ret << a[i]
end
ret
end
puts match_first("abc", "abcdef") #=> "abc"
puts match_first("abc", "abc") #=> "abc"
puts match_first("abc", "fabcd") #=> ""
puts match_first("あいう", "あいうえ") #=> "あいう"
■ なんか、もちっとエレガントな書き方ないかな。ひょっとして正規表現一発で書けちゃったりする?

正規表現二発でやってみました。<br><br>def match_first(a, b)<br> if a =~ /^(#{Regexp.escape(b)})/ or b =~ /^(#{Regexp.escape(a)})/<br> $1<br> else<br> return ''<br> end<br>end
def match_first(a,b)<br> a = a.split(//)<br> b = b.split(//)<br> l = [a.length, b.length].min<br> a[0, (0...l).find{|i| a[i] != b[i] } || l].join('')<br>end