pachl
2/20/2008 3:56:00 AM
On Feb 19, 6:26 pm, botp <botp...@gmail.com> wrote:
> From: pachl [mailto:clintpa...@gmail.com]
> # Do adjacent strings or strings separated by backslash and a newline
> # create multiple String objects?
>
> iianm, no. you create just one string literal, ergo one string object.
> it's part of ruby syntax on string literals. very useful if you want
> to emphasize a string part, similar to numeric literals where you can
> put underscore to separate some digits...
>
> # For example:
>
> s1 = 'asdf' 'qwer'
> #=> "asdfqwer" # here string literal processing continues
>
> s2 = 'asdf'> 'qwer'
> #=> "asdfqwer" # here too
>
> s1 = 'asdf' 'qwer' "#{s2}" # still inline works
> #=> "asdfqwerasdfqwer"
>
> s1 = 'asdf' 'qwer' s2 # this one errs, ruby expect all literals
> SyntaxError: compile error
> (irb):13: syntax error, unexpected tIDENTIFIER, expecting $end
> from (irb):13
> from :0
>
> s1 = 'asdf' + 'qwer' + s2
> #=> "asdfqwerasdfqwer"
>
> it may look like concat op,
>
> s1 = 'asdf' 'qwer' + s2
> #=> "asdfqwerasdfqwer"
>
> but...
>
> s1 = 'asdf' ('qwer' + s2)
> SyntaxError: compile error
> (irb):17: syntax error, unexpected '(', expecting $end
> s1 = 'asdf' ('qwer' + s2)
> ^
> from (irb):17
> from :0
>
> s1 = ('asdf' 'qwer') + s2
> #=> "asdfqwerasdfqwer"
>
Thanks everyone. This answered my question. It makes total sense that
the parser would take care of this adjacent string concatenation.
I was creating long SQL strings and to make the code readable, I was
splitting the query string among multiple lines and joining them using
the '<<' operator.
sql = 'select * from table ' <<
'where id=3 ' <<
'order by id'
Now I can go refactor my code and avoid the unnecessary overhead of
string appending/concatenating.
-pachl