Procs From "Understanding Ruby Blocks, Procs, and Lambdas" Article -
ok, reviewing procs, lambdas, , blocks via link.
question on code:
class array def iterate! self.each_with_index |n, i| self[i] = yield(n) end end end array = [1, 2, 3, 4] array.iterate! |n| n ** 2 end puts array.inspect conceptually, understand everything, except 1 line this:
self[i] = yield(n)
i self in line self.each_with_index |n, i| means it's class method, right?
but why need assign parameters in yield(n) self[i]?
please explain in super basic way if can.
(in other words, please nice - people part here - little nervous i'm not getting making me sense stupid)
the method iterate!, instance method. self in self.each_with_index receiver of method enumerable#each_with_instance. since self current instance of array ([1,2,3,4] in example), self. not needed; i.e., (and imo, should) write each_with_index |n, i|.... in other words, self implied receiver when no explicit receiver specified.
regarding line:
self[i] = yield(n) for illustration array = [1,2,3,4] enumerator is:
enum = [1,2,3,4].each_with_index #=> #<enumerator: [1, 2, 3, 4]:each_with_index> with elements
enum.to_a #=> [[1, 0], [2, 1], [3, 2], [4, 3]] the first element passed block array#each hence [1,0], assigned block variables:
n = 1 = 0 resulting in
self[0] = yield(1) => 1**2 => 1 and on.
ruby lambda proc
No comments:
Post a Comment