When passing objects as parameters, are they passed by reference?

后端 未结 5 610
名媛妹妹
名媛妹妹 2021-01-12 12:01

Is there any performance implications if I do either of these:

def do_something(user, article)
...
end

versus

def do_someth         


        
5条回答
  •  灰色年华
    2021-01-12 12:18

    Re: https://stackoverflow.com/a/6528257 (I didn't have enough reputation to comment at time of writing)

    Ah, but Jörg, if you actually manipulate the argument, instead of assigning a new object to it, the method behaves differently. Using .replace instead of = gives you this:

    def is_Ruby_pass_by_value_or_reference?(parameter)
      parameter.replace 'Ruby is pass-by-reference.'
    end
    
    var = 'Ruby is pass-by-value.'
    
    is_Ruby_pass_by_value_or_reference?(var)
    
    puts var
    # Ruby is pass-by-reference.
    

    In fact, let's elaborate just a little more, just to show the difference:

    def is_Ruby_pass_by_value_or_reference?(parameter)
      parameter.replace 'Ruby is pass-by-reference.'
      parameter = "This assigns a whole new object to 'parameter', but not to 'var'."
      puts parameter
    end
    
    var = 'Ruby is pass-by-value.'
    
    is_Ruby_pass_by_value_or_reference?(var)
    # This assigns a whole new object to 'parameter', but not to 'var'.
    
    puts var
    # Ruby is pass-by-reference.
    

提交回复
热议问题