ruby - Code Academy: Unit 5 (Blocks & Sorting): Methodical Sorting -


this works if use alphabetize(a, true) or alphabetize(a):

def alphabetize(arr, rev=false)     if rev == true         arr.sort.reverse!     else         arr.sort!     end     end 

but won't work default case when enter arr parameter, alphabetize(a) or alphabetize(a, true) works alphabetize(a, true):

def alphabetize(arr, rev=false)     arr.sort!     if rev == true         arr.sort.reverse!     end     end 

could explain why?

the method array#sort! (notice bang) performs in-place sort, means original array gets sorted.

array = [1, 3, 4, 5, 2] array.sort!  #=> [1, 2, 3, 4, 5] array  #=> [1, 2, 3, 4, 5] 

the method array#sort (no bang) not change original array, instead returns new array sorted.

array = [1, 3, 4, 5, 2] array.sort  #=> [1, 2, 3, 4, 5] array  #=> [1, 3, 4, 5, 2] 

so problem @ line 4 reverses new array other original one.

p.s. before write down code, think expect code do. should code modify original array?

if answer yes, code should be

# convention, in-place modification method names end ! def alphabetize!(arr, rev=false)   arr.sort!    # don't use rev == true. it's redundant.   arr.reverse! if rev    arr end 

if answer no, then

def alphabetize(arr, rev=false)   new_array = arr.sort    # think why i'm using in-place reverse here.   new_array.reverse! if rev    new_array end