Ruby - method changes input variable value -



Ruby - method changes input variable value -

i'm new ruby , i'm having problem understanding what's happening in method.

i create phone call in rails controller -

@arr = someclass.find_max_option(params[:x], @pos, params[:y], some_var)

i'm trying homecoming value @arr, happens successfully, manipulations create @pos within method beingness brought well; value of @pos changes when i'm trying value @arr.

here's more details on method

#before going method @pos = [a,b] def self.find_max_option(x, pos, y, some_var) pos.collect! { |element| (element == b) ? [c,d] : element } end #new value of pos = [a, [c,d]] fine within in method ... #some calculations not relevant question, pos gets used generate some_array homecoming some_array

but when method finished , gets controller, value of @pos [a,[c,d]] well.

what's going on here? thought pos treated separately @pos , value wouldn't carry back. workaround created new local variable within method, i'd know happening

#my workaround not modify pos variable pos_groomed = pos.collect { |element| (element == b) ? [c,d] : element } end

instead of using collect!, utilize collect (without !). so, rewrite method as:

def self.find_max_option(x, pos, y, some_var) pos.collect { |element| (element == b) ? [c,d] : element } end

when using ! version of collect, replacing each element value returned block. however, when using collect without !, new array created, , object collect beingness called doesn't changed. see docs:

collect! vs collect

using ! @ end of method name mutual practice in ruby. this question related , worth taking look.

ruby-on-rails ruby

Comments

Popular posts from this blog

formatting - SAS SQL Datepart function returning odd values -

c++ - Apple Mach-O Linker Error(Duplicate Symbols For Architecture armv7) -

php - Yii 2: Unable to find a class into the extension 'yii2-admin' -