Hey everyone,
I’ve found a code part that I don’t understand:
def runCode
return <<STARTCODE
(…)
STARTCODE
end
Unfortunately the google search doesn’t work because the << will be
ignored.
Could you explain what it’s doing?
Oh, and I can’t try out what it’s doing because I’ll get the error that
STARTCODE can’t be found until EOF…
Thx
Il giorno Mon, 23 Jan 2012 02:54:17 +0900
Blub B. [email protected] ha scritto:
end
It’s another form of string literal, just as ’ ’ or " ". The string
content
start from the line after STARTCODE and continues until a line starting
with
STARTCODE is found. Note that the line must truly start with STARTCODE,
it
can’t have any leading whitespace (this is the reason you get an error).
If
you want to have whitespace before the closing STARTCODE, you must put a
after the <<:
return <<-STARTCODE
Note that the delimiting string doesn’t need to be STARTCODE, it can be
anything you like, as long as you use the same string at the beginning
and
end of the string.
I hope this helps
Stefano
On Sun, Jan 22, 2012 at 6:54 PM, Blub B. [email protected]
wrote:
end
Unfortunately the google search doesn’t work because the << will be
ignored.
Could you explain what it’s doing?
Oh, and I can’t try out what it’s doing because I’ll get the error that
STARTCODE can’t be found until EOF…
The technique is called a “here doc”.
First match in Google
Jay Fields' Thoughts: Ruby: Multiline strings - here doc or quotes
The specific issue in your code example is that you need to use either:
def runCode
return <<STARTCODE
(…)
STARTCODE # NO margin left of STARTCODE
end
or:
def runCode
return <<-STARTCODE
(…)
STARTCODE
end
If you had access to an editor with built-in coloring,
these types of problems become immediately obvious
(like e.g. vim and many others).
HTH,
Peter
On Sun, Jan 22, 2012 at 7:10 PM, Peter V.
[email protected] wrote:
(…)
return <<STARTCODE
(…)
STARTCODE # NO margin left of STARTCODE
end
Careful with comments on that line:
13:33:38 Temp$ ruby19 x.rb
x.rb:6: can’t find string “STARTCODE” anywhere before EOF
x.rb:2: syntax error, unexpected $end, expecting tSTRING_CONTENT or
tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
13:34:12 Temp$ cat -n x.rb
1
2 s=<<STARTCODE
3 x
4 STARTCODE # NO margin left of STARTCODE
5
6 p s
13:34:14 Temp$
Cheers
robert
On Mon, Jan 23, 2012 at 1:35 PM, Robert K.
[email protected]wrote:
On Sun, Jan 22, 2012 at 7:10 PM, Peter V.
[email protected] wrote:
…
x.rb:2: syntax error, unexpected $end, expecting tSTRING_CONTENT or
Cheers
robert
Indeed.
I did some tests now and if I see correctly, both
the EOS (End Of String) and -EOS here doc formats
require that EOS is immediately followed by a
newline in the code.
Thank you 
Peter