Skip to content

Commit cf64ab7

Browse files
committed
Add normal way to apply method to block element versus &method(...)
1 parent da3e53c commit cf64ab7

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

README.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,42 @@ Comparison:
118118
method_missing: 2728893.0 i/s - 1.40x slower
119119
```
120120

121+
##### Normal way to apply method vs `&method(...)` [code](code/general/block-apply-method.rb)
122+
123+
```
124+
$ ruby -v code/general/block-apply-method.rb
125+
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
126+
127+
Calculating -------------------------------------
128+
normal 85.749k i/100ms
129+
&method 35.529k i/100ms
130+
-------------------------------------------------
131+
normal 1.867M (± 7.6%) i/s - 9.347M
132+
&method 467.095k (± 6.4%) i/s - 2.345M
133+
134+
Comparison:
135+
normal: 1866669.5 i/s
136+
&method: 467095.4 i/s - 4.00x slower
137+
```
138+
139+
##### `define_method` vs `module_eval` for Defining Methods [code](code/general/define_method-vs-module-eval.rb)
140+
141+
```
142+
$ ruby -v code/general/define_method-vs-module-eval.rb
143+
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
144+
145+
Calculating -------------------------------------
146+
module_eval with string 125.000 i/100ms
147+
define_method 138.000 i/100ms
148+
-------------------------------------------------
149+
module_eval with string 1.130k (±20.3%) i/s - 5.500k
150+
define_method 1.346k (±25.9%) i/s - 6.348k
151+
152+
Comparison:
153+
define_method: 1345.6 i/s
154+
module_eval with string: 1129.7 i/s - 1.19x slower
155+
```
156+
121157

122158
### Array
123159

code/general/block-apply-method.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require "benchmark/ips"
2+
3+
def do_something(n)
4+
4*n + 2
5+
end
6+
7+
def fast
8+
[1, 2, 3].map { |n| do_something(n) }
9+
end
10+
11+
def slow
12+
[1, 2, 3].map(&method(:do_something))
13+
end
14+
15+
Benchmark.ips do |x|
16+
x.report("normal") { fast }
17+
x.report("&method") { slow }
18+
x.compare!
19+
end

0 commit comments

Comments
 (0)