तीन तरीके: 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
मानक
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" } }
}
... जैसा कि आप देख सकते हैं, किसी विधि को कॉल करने का तरीका, किसी विधि को कॉल करने का सबसे तेज़ गतिशील तरीका है, यह भी ध्यान दें कि eval का उपयोग करना कितना धीमा है।
#######################################
##### 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)
क्रेडिट इस ब्लॉग पोस्ट पर जाता है जो तीन तरीकों पर थोड़ा और विस्तृत होता है और यह भी दिखाता है कि तरीकों की मौजूदगी की जाँच कैसे करें।