On Tue, Feb 8, 2011 at 10:34 AM, Frederick Cheung < [email protected]> wrote:
> On Feb 8, 3:33 pm, David Kahn <[email protected]> wrote: > > On Tue, Feb 8, 2011 at 9:06 AM, Frederick Cheung < > [email protected] > > > > I see, I guess I got confused as I use ActiveRecord so much and within a > > each block, by setting values and calling save it of course saves the > > object. Is there a way to achieve what I am presenting, though, passing a > > batch of variables and having them operated on and changed? > > that is very different. doing some_object.foo = 'bar' is calling a > method on an object that changes its state, whereas > foo = bar just points a local variable at something new. (and in > addition Fixnums/BigDecimal are immutable - there is no method you can > call on a number to change it into another nmber) > I think I am starting to see, maybe. Hopefully not being too annoying here. It seems rather strange to me that if you have an object, i.e. a string that it should behave differently than my Account object.... the string#=() method is still a property, right? -- no different really than account#name=(), so seems it would be logical that if I can do account.name= 'x' within an iterator, that doing string='y' should also work, but as we see it does not (lets put the Fixnums and BigDecimal aside as I understand as a property they are re-created rather than modified). arr.each {|account| account.name = 'x'} arr.each {|string| string=('y')} .... they seem to me to be the same thing, unless objects are really not the same. But with another experiment I see something interesting --- if I instantiate a string formally as an object, then I do get the by reference relationship in an array: ruby-1.9.2-p136 :098 > str = String.new('David') => "David" ruby-1.9.2-p136 :099 > arr = [str] => ["David"] ruby-1.9.2-p136 :100 > arr.each {|s| str = 'new val'} => ["David"] ruby-1.9.2-p136 :101 > str => "new val" But if I just do it as a normal assignment, I do not: ruby-1.9.2-p136 :106 > string = 'David' => "David" ruby-1.9.2-p136 :107 > arr = [string] => ["David"] ruby-1.9.2-p136 :108 > arr.each {|s| s = 'new val'} => ["David"] ruby-1.9.2-p136 :109 > string => "David" I thought that doing str = 'David' was just a shortcut to doing str = String.new('David') But apparently the behavior at least in the context of an array is different. Wow! > > > > > Excuse my ingenuity, but I am trying to understand... if I have an array > of > > variables it seems that when the array is created, the elements which > were > > variables are substituted by values, and there is no reference: > > > > (rdb:1) arr = [v1,v2,v3] > > [1, 2, 3] > > Without resorting to dirty tricks, you can't change the values of > local variables other than by actually doing > v1 = 2. arr does NOT contain [v1,v2,v3]. It contains 3 objects, and > the local variables v1,v2,v3 just happen to also be referencing those > same objects. > > Fred > > > (rdb:1) v1 > > 1 > > (rdb:1) arr[0]=5 > > 5 > > (rdb:1) v1 > > 1 > > > > This must sound like kindergarten but apparently I have been working > albeit > > successfully under some very false premises. > > > > > > > > > > > > > Fred > > > > > -- > > > You received this message because you are subscribed to the Google > Groups > > > "Ruby on Rails: Talk" group. > > > To post to this group, send email to [email protected] > . > > > To unsubscribe from this group, send email to > > > [email protected]. > > > For more options, visit this group at > > >http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

