On Sep 26, 11:53 pm, Aryk Grosz <[EMAIL PROTECTED]>
wrote:
> Looking through the rails core code, I see method_missing performed like
> this a lot:
>
> def method_missing(method, *args)
> if block_given?
> current_status.send(method, *args) { |*block_args|
> yield(*block_args) }
> else
> current_status.send(method, *args)
> end
> end
>
> Why not just write:
>
> def method_missing(method, *args, &block)
> current_status.send(method, *args, &block)
> end
>
Building the proc object (as implied by the use of &block) is more
expensive than just passing a block:
require 'benchmark'
include Benchmark
def dummy()
yield
end
def dummy_proc(&block)
block.call
end
bm do |x|
x.report('with yield'){ 100000.times { dummy {y=1}}}
x.report('with &block') { 100000.times { dummy_proc {y=1}}}
end
outputs (on a fairly elderly machine):
user system total real
with yield 0.420000 0.000000 0.420000 ( 0.464097)
with &block 2.340000 0.040000 2.380000 ( 2.584321)
Fred
> It the above implementation much faster or do they perform differently?
> --
> Posted viahttp://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby
on Rails: Talk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---