On Fri, Apr 22, 2011 at 1:42 PM, Jazmin <jazminschroe...@gmail.com> wrote:

> I guess you could do something like this:
> x = defined?(x) ? x+="string" : ""


Thanks Jazmin, this is the kind of thing I was looking for although I guess
in the end it is probably less readable than just assigning the variable at
the top, hmmm.. and am seeing also why it wouldnt make sense to override a
base class like object or something with the above to handle undefined cases
as it would not know the type of variable to create.


>
> You can assign a value to a variable if it doesn't exist like this:
> s ||= ""
> but in your case you want to use the operand + so the string needs to
> exist.
>
> Also an alternative for the loop example
> regex = ''
>     10.times { regex += '.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*\n' }
>
> could be changed to
> regex = '.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*\n' *10
>
> hope it helps
>
> On Fri, Apr 22, 2011 at 1:19 PM, David Kahn 
> <d...@structuralartistry.com>wrote:
>
>>
>>
>> On Fri, Apr 22, 2011 at 1:15 PM, Kendall Gifford <zettab...@gmail.com>wrote:
>>
>>> On Friday, April 22, 2011 10:32:35 AM UTC-6, DK wrote:
>>>>
>>>> Just curious if there is a more elegant way to set a variable if it
>>>> happens to not exist yet. I often find I am doing somthing like the
>>>> following:
>>>>
>>>>     regex = ''
>>>>     10.times { regex += '.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*\n' }
>>>>
>>>> Is there some prettier way to within the second line create the variable
>>>> if it does not exist yet? The above just looks ugly. I know I could use a
>>>> class variable but that also does not seem right as I do not need it to be 
>>>> a
>>>> class variable:
>>>>
>>>>     10.times { @regex += '.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*\n' }
>>>>
>>>>
>>>>
>>> Having no idea what the context is I'll try to answer:
>>>
>>> Since the code where you're modifying your variable is w/in a block, any
>>> variables referenced therein that don't already exist (outside the block)
>>> won't exist outside the block once after it has run:
>>>
>>> > $ cat test.rb
>>> > 1.times { hi = "hello" }
>>> > defined?(hi) ? hi += " bye" : hi = "NOT DEFINED"
>>> > puts hi
>>> > $ ruby test.rb
>>> > NOT DEFINED
>>>
>>> Thus, for your block to have any effect on local variables that exist in
>>> the enclosing scope these variables must already "exist" before the block.
>>> This means the parser must see the local variable (in some context where it
>>> is clear it is a local variable and not a method call, such as in an
>>> assignment statement) before the block definition in the enclosing scope.
>>>
>>> So, assuming I understand your intent, the answer is no. The local must
>>> already be defined (whether initialized with an actual value is another
>>> matter (*see example below)) or you should use an instance, class, or
>>> global.
>>>
>>> * (
>>> > $ cat test.rb
>>> > hi = nil if false # defines hi even though assignment never executed
>>> > 1.times { hi = "hello" }
>>> > defined?(hi) ? hi += " bye" : hi = "NOT DEFINED"
>>> > puts hi
>>> > $ ruby test.rb
>>> > hello bye
>>>
>>> I don't know if this helps any or not...
>>>
>>
>> Thanks Kendall... actually I think I confused things by putting the block
>> but I think the answer is still pretty much the same for a case such as the
>> following, that if I did not want to first create the variable by
>> assignment, that I should use an instance, class or global as you say.
>>
>> regex = ''
>> regex += 'something'
>> ...
>> regex += 'something else'
>> ...
>> regex += 'and another something'
>>
>>
>>>  --
>>> 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 rubyonrails-talk@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> rubyonrails-talk+unsubscr...@googlegroups.com.
>>> 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 rubyonrails-talk@googlegroups.com.
>> To unsubscribe from this group, send email to
>> rubyonrails-talk+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>
>
>
> --
> Jazmin
>
> --
> 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 rubyonrails-talk@googlegroups.com.
> To unsubscribe from this group, send email to
> rubyonrails-talk+unsubscr...@googlegroups.com.
> 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 rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to