4
我的Ruby版本是1.9.3p448。「-r profile」和「require'profile'」有什麼區別?
我有一個簡單的程序:
count = 0
words = File.open('/usr/share/dict/words')
while word = words.gets
word.chomp!
count += 1 if word.length == 12
end
puts "#{count} twelve-character words"
當我與ruby -r profile test.rb
評價它的輸出是:
7226 twelve-character words
% cumulative self self total
time seconds seconds calls ms/call ms/call name
9.63 0.44 0.44 119095 0.00 0.00 String#chomp!
9.19 0.86 0.42 119095 0.00 0.00 Fixnum#==
6.35 1.15 0.29 119095 0.00 0.00 String#length
5.91 1.42 0.27 119096 0.00 0.00 IO#gets
0.66 1.45 0.03 7226 0.00 0.00 Fixnum#+
0.00 1.45 0.00 2 0.00 0.00 IO#set_encoding
0.00 1.45 0.00 1 0.00 0.00 IO#open
0.00 1.45 0.00 1 0.00 0.00 File#initialize
0.00 1.45 0.00 1 0.00 0.00 Fixnum#to_s
0.00 1.45 0.00 2 0.00 0.00 IO#write
0.00 1.45 0.00 1 0.00 0.00 IO#puts
0.00 1.45 0.00 1 0.00 0.00 Kernel.puts
0.00 4.57 0.00 1 0.00 4570.00 #toplevel
但是,當我在節目的開頭添加require 'profile'
,然後用ruby test.rb
進行評估,輸出結果爲:
7226 twelve-character words
% cumulative self self total
time seconds seconds calls ms/call ms/call name
25.61 0.63 0.63 119095 0.01 0.01 String#chomp!
16.67 1.04 0.41 119096 0.00 0.00 IO#gets
0.00 1.04 0.00 1 0.00 0.00 Fixnum#to_s
0.00 1.04 0.00 1 0.00 0.00 IO#open
0.00 1.04 0.00 1 0.00 0.00 File#initialize
0.00 1.04 0.00 2 0.00 0.00 IO#write
0.00 1.04 0.00 1 0.00 0.00 IO#puts
0.00 1.04 0.00 1 0.00 0.00 Kernel.puts
0.00 2.46 0.00 1 0.00 2460.00 #toplevel
看來,第二種方式丟失了一些方法,如Fixnum#==
,Fixnum#+
,String#length
和IO#set_encoding
。
爲什麼它沒有與第一個結果相同的結果?
我也得到2.1.1p76這個行爲。 – Max
如果我'要求'profile',我也會得到完整的輸出;在irb中加載'test.rb''。所以這在'-r'選項中似乎沒有什麼特別的地方。 – Max