Heredoc and array / hash construction syntax error

D

David Tran

My question is how can you construct a "heredoc array" ( or hash).

Let me start with is code:
a = [
1,
2
]

it is perfect ruby syntax.

but if you put the ',' on next line like:
a = [
1
,
2
]
then you got syntax error.

It seems stupid to put ',' on next line but I have no choice,
here is my use case with heredoc example:
a = [
<<EOD1
abc
very very long string and many many lines ...
EOD1
,
<<EOD2
123
very very long string and many many lines ...
EOD2
]

I cannot put the ',' just after EOD1, it must to the next line,
if not, the "EOD1," is not consider termination of heredoc.
but put the ',' on next line then I got syntax error ...


How do you resolve this problem?

Thank you.
 
B

Brian Mitchell

My question is how can you construct a "heredoc array" ( or hash).

Let me start with is code:
a = [
1,
2
]

it is perfect ruby syntax.

but if you put the ',' on next line like:
a = [
1
,
2
]
then you got syntax error.

It seems stupid to put ',' on next line but I have no choice,
here is my use case with heredoc example:
a = [
<<EOD1
abc
very very long string and many many lines ...
EOD1
,
<<EOD2
123
very very long string and many many lines ...
EOD2
]

I cannot put the ',' just after EOD1, it must to the next line,
if not, the "EOD1," is not consider termination of heredoc.
but put the ',' on next line then I got syntax error ...

How do you resolve this problem?

Thank you.

Depending on what the test is, a %Q{ } pair might work better. You
will have to escape any '}'.

a = [
%Q{\
Multi line
white space is kept.
My here doc clone "can have quotes" 'of' any kind.},

%Q{\
just remember to use a \} to close
your text}
]

Personally, I don't care for heredoc format so i don't use it often.

Brian.
 
E

Eric Hodel

--Apple-Mail-9--438143558
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII; format=flowed


My question is how can you construct a "heredoc array" ( or hash).

Let me start with is code:
a = [
1,
2
]

it is perfect ruby syntax.

but if you put the ',' on next line like:
a = [
1
,
2
]
then you got syntax error.

It seems stupid to put ',' on next line but I have no choice,
here is my use case with heredoc example:

Like this:

$ ruby
a = [
<<EOD,
abc
stuff
EOD
]

--
Eric Hodel - (e-mail address removed) - http://segment7.net
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04

--Apple-Mail-9--438143558
content-type: application/pgp-signature; x-mac-type=70674453;
name=PGP.sig
content-description: This is a digitally signed message part
content-disposition: inline; filename=PGP.sig
content-transfer-encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Darwin)

iD8DBQFCOLayMypVHHlsnwQRAierAJwPcQi009uxX1J51q/iN2l7HSlKpwCdHvoR
MX5/I6qMRy7+VbM2HW+0n4M=
=AWJl
-----END PGP SIGNATURE-----

--Apple-Mail-9--438143558--
 
R

Relm

It seems stupid to put ',' on next line but I have no choice,
here is my use case with heredoc example:
a = [
<<EOD1
abc
very very long string and many many lines ...
EOD1
,
<<EOD2
123
very very long string and many many lines ...
EOD2
]

I cannot put the ',' just after EOD1, it must to the next line,
if not, the "EOD1," is not consider termination of heredoc.
but put the ',' on next line then I got syntax error ...

It may be more readable to put the expression on one line with all the
heredocs stacked beneath:

a = [<<EOD1, <<EOD2]
abc
very very long string and many many lines ...
EOD1
123
very very long string and many many lines ...
EOD2
 
R

Robert Klemme

Relm said:
It seems stupid to put ',' on next line but I have no choice,
here is my use case with heredoc example:
a = [
<<EOD1
abc
very very long string and many many lines ...
EOD1
,
<<EOD2
123
very very long string and many many lines ...
EOD2
]

I cannot put the ',' just after EOD1, it must to the next line,
if not, the "EOD1," is not consider termination of heredoc.
but put the ',' on next line then I got syntax error ...

It may be more readable to put the expression on one line with all the
heredocs stacked beneath:

a = [<<EOD1, <<EOD2]
abc
very very long string and many many lines ...
EOD1
123
very very long string and many many lines ...
EOD2

This works also:

a = [
<<EOD1,
abc
very very long string and many many lines ...
EOD1
<<EOD2,
123
very very long string and many many lines ...
EOD2
]

Note: "<<EOD1" is the expression that is replaced by the string, hence the
"," directly after it.

Kind regards

robert
 
E

Eric Hodel

--Apple-Mail-14--370089524
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII; format=flowed

It may be more readable to put the expression on one line with all the
heredocs stacked beneath:

I find that type of code gives me rather intense feelings of disgust
and loathing.

I found such an example in mkmf.rb and it was quite confusing to me,
because the first here-doc terminators were nearly indistinguishable
from the rest of the contents of the file.

The biggest problem with beginning multiple here-docs on a single line
is that you can have no whitespace between the end of the first and the
beginning of the second unless that whitespace is supposed to be in the
here-docs.

--
Eric Hodel - (e-mail address removed) - http://segment7.net
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04

--Apple-Mail-14--370089524
content-type: application/pgp-signature; x-mac-type=70674453;
name=PGP.sig
content-description: This is a digitally signed message part
content-disposition: inline; filename=PGP.sig
content-transfer-encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Darwin)

iD8DBQFCOcCJMypVHHlsnwQRAuIOAKD45BDJSLk3VELycooIr9oaN9V/LwCfa1ut
l1Gc76HECmaIiquEduYHKX8=
=Xpym
-----END PGP SIGNATURE-----

--Apple-Mail-14--370089524--
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,756
Messages
2,569,540
Members
45,025
Latest member
KetoRushACVFitness

Latest Threads

Top