11 EYLÜL 2009, Cuma
Ruby: Proc#arama vs verim
thrice
yöntemi Ruby aşağıdaki iki uygulamaları arasında davranış farkları nelerdir?
module WithYield
def self.thrice
3.times { yield } # yield to the implicit block argument
end
end
module WithProcCall
def self.thrice(&block) # & converts implicit block to an explicit, named Proc
3.times { block.call } # invoke Proc#call
end
end
WithYield::thrice { puts "Hello world" }
WithProcCall::thrice { puts "Hello world" }
"Davranış farklılıkları" hata işleme, performans, araç, destek, vb. ile
CEVAP
11 EYLÜL 2009, Cuma
İlki aslında diğer sözdizimsel şeker olduğunu düşünüyorum. Diğer bir deyişle davranışsal fark yok.
İkinci şekilde de olsa "değişken." blok kurtarmak için ne sağlar Sonra blok zaman geri başka bir zamanda çağrılabilir.
< / ^ hr .
Tamam. Bu sefer gittim ve hızlı bir karşılaştırma yaptı
require 'benchmark'
class A
def test
10.times do
yield
end
end
end
class B
def test(&block)
10.times do
block.call
end
end
end
Benchmark.bm do |b|
b.report do
a = A.new
10000.times do
a.test{ 1 1 }
end
end
b.report do
a = B.new
10000.times do
a.test{ 1 1 }
end
end
b.report do
a = A.new
100000.times do
a.test{ 1 1 }
end
end
b.report do
a = B.new
100000.times do
a.test{ 1 1 }
end
end
end
Sonuçlar ilginç:
user system total real
0.090000 0.040000 0.130000 ( 0.141529)
0.180000 0.060000 0.240000 ( 0.234289)
0.950000 0.370000 1.320000 ( 1.359902)
1.810000 0.570000 2.380000 ( 2.430991)
Bu kullanarak gösterirblok.Araneredeyse 2x kullanarak daha yavaştırverim.
Bunu Paylaş:
'proc arasındaki fark ne Ruby ve ...
Ruby: örneği Arama sınıf yöntemi...
Arama Ruby shell komutları...
Ruby dinamik arama yöntemi...
Nasıl ruby hash değerleri ile karma bi...