তিনটি উপায়: send
/ call
/ eval
- এবং তাদের বেঞ্চমার্ক
সাধারণ প্রার্থনা (রেফারেন্সের জন্য):
s= "hi man"
s.length #=> 6
ব্যবহার send
s.send(:length) #=> 6
ব্যবহার call
method_object = s.method(:length)
p method_object.call #=> 6
ব্যবহার eval
eval "s.length" #=> 6
benchmarks
require "benchmark"
test = "hi man"
m = test.method(:length)
n = 100000
Benchmark.bmbm {|x|
x.report("call") { n.times { m.call } }
x.report("send") { n.times { test.send(:length) } }
x.report("eval") { n.times { eval "test.length" } }
}
... যেমন আপনি দেখতে পাচ্ছেন, কোনও পদ্ধতি অবজেক্টটি ইনস্ট্যান্ট করা একটি পদ্ধতি কল করার দ্রুততম গতিশীল উপায়, এওলটি ব্যবহার করা কতটা ধীর গতির তা লক্ষ্য করুন।
#######################################
##### The results
#######################################
#Rehearsal ----------------------------------------
#call 0.050000 0.020000 0.070000 ( 0.077915)
#send 0.080000 0.000000 0.080000 ( 0.086071)
#eval 0.360000 0.040000 0.400000 ( 0.405647)
#------------------------------- total: 0.550000sec
# user system total real
#call 0.050000 0.020000 0.070000 ( 0.072041)
#send 0.070000 0.000000 0.070000 ( 0.077674)
#eval 0.370000 0.020000 0.390000 ( 0.399442)
ক্রেডিট এই ব্লগ পোস্টে যায় যা তিনটি পদ্ধতিতে আরও কিছুটা বিশদভাবে জানায় এবং পদ্ধতিগুলি বিদ্যমান কিনা তা পরীক্ষা করে দেখুন।