自分の興味の赴くままに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("あいう", "あいうえ") #=> "あいう"
■ なんか、もちっとエレガントな書き方ないかな。ひょっとして正規表現一発で書けちゃったりする?

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