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

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.

Reply via email to