history

青木日記 RSS

<前の日 | この月 | 次の日>

2006-10-27

よく使われるメソッド名

逃避活動中。

ふと、BitClust データベースにあるメソッドの中ではどんな名前が多いのか調べてみた。

~/c/bitclust % ruby t
new             106
to_s            33
[]              32
each            29
size            25
close           21
open            19
delete          19
<<              18
==              17
to_a            17
+               15
name            14
to_i            14
<=>             13
[]=             12
length          12
path            11
-               11
include?        11
parse           11
dup             11
clone           10
clear           10
&               10
read            10

new がトップ。そりゃそうだ。

その次に to_s, [], each, size と来る。 みんな length が嫌いなようだ。

その次が close, open。……どうして数が違うのか。

でもって俺の嫌いな <<。 特に Array#<< が嫌いなんだよ。 concat だか push だか忘れるから。

(18:53)

ReFe2

ReFe2、その実態は BitClust 対応 ReFe。

~/c/bitclust % refe2 string index -l
String#index

もちろん継承も見る。

~/c/bitclust % refe2 arr map
Array#map < Enumerable#collect
--- collect {|item| ... }
--- map {|item| ... }
 
各要素に対してブロックを評価した結果を全て含む配列を返します。
 
ブロックを省略した場合、
 
    obj.collect {|item| item}
 
を行います。これは [[m:Enumerable#to_a]] と同じです。

名前と実体の区別によってエントリの絞り込みも多少進化している。 例えば「s instance_eval」で検索すると S で始まるクラス全部に対して、 (Object から継承した) Object#instance_eval がひっかかってしまうのだが、 エントリの同一判定で絞り込む。

~/c/bitclust % refe2 s instance_eval
ScriptError#instance_eval < Object#instance_eval
SignalException#instance_eval < Object#instance_eval
SDBM#instance_eval < Object#instance_eval
Shell#instance_eval < Object#instance_eval
SystemExit#instance_eval < Object#instance_eval
String#instance_eval < Object#instance_eval
Symbol#instance_eval < Object#instance_eval
Shell::Filter#instance_eval < Object#instance_eval
StringScanner#instance_eval < Object#instance_eval
SimpleDelegator#instance_eval < Object#instance_eval
Sync#instance_eval < Object#instance_eval
Synchronizer#instance_eval < Object#instance_eval
SecurityError#instance_eval < Object#instance_eval
SyntaxError#instance_eval < Object#instance_eval
SystemStackError#instance_eval < Object#instance_eval
SyncEnumerator#instance_eval < Object#instance_eval
Struct#instance_eval < Object#instance_eval
StandardError#instance_eval < Object#instance_eval
StringIO#instance_eval < Object#instance_eval
Set#instance_eval < Object#instance_eval
SystemCallError#instance_eval < Object#instance_eval
--- instance_eval(expr, filename = '(eval)', lineno = 1)
--- instance_eval {|obj| ... }
 
オブジェクトのコンテキストで文字列 expr を評価してその結果を
返します。
 
(以下略)

速度は、平均的なとこでこのくらい。

~ % time refe2 arr map >/dev/null
refe2 arr map > /dev/null  0.13s user 0.02s system 98% cpu 0.153 total

最悪の場合でもこれくらい。

~ % time refe2 s instance_eval >/dev/null
refe2 s instance_eval > /dev/null  0.25s user 0.02s system 98% cpu 0.275 total

さすがに ReFe1 よりは遅いけど、 ReFe1 はエントリ数が少なすぎるので公平じゃないか。

~ % time refe string index >/dev/null
refe string index > /dev/null  0.05s user 0.01s system 71% cpu 0.080 total
~ % time refe2 string index >/dev/null
refe2 string index > /dev/null  0.14s user 0.02s system 98% cpu 0.161 total
~ % time ri -T String.index >/dev/null
ri -T String.index > /dev/null  0.46s user 0.08s system 98% cpu 0.545 total

ri よりは数倍速いのでいいとしよう。

(00:46)

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS