I have problems passing a HERE document as the first parameter
to a function expecting more than 1 parameter. Example:
# This is file here1.rb
def q(a,b)
end
q(<<-END
line1
line2
END
,'x')
Executing this program yields the error messages
./here1.rb:9: syntax error, unexpected ',', expecting ')'
,'x')
^
./here1.rb:9: syntax error, unexpected ')', expecting $end
Using a temporary variable to hold the content of the HERE
string works fine though:
temp=<<-END
line1
line2
END
q(temp,'x')
Bug in Ruby? Or do I misunderstand something in the workings of the
parser?
Ronald
···
--
Ronald Fischer <ronald.fischer@venyon.com>
Phone: +49-89-452133-162
Ronald Fischer wrote:
I have problems passing a HERE document as the first parameter
to a function expecting more than 1 parameter. Example:
# This is file here1.rb
def q(a,b)
end
q(<<-END
line1
line2
END
,'x')
Executing this program yields the error messages
./here1.rb:9: syntax error, unexpected ',', expecting ')'
,'x')
^
./here1.rb:9: syntax error, unexpected ')', expecting $end
Using a temporary variable to hold the content of the HERE
string works fine though:
temp=<<-END
line1
line2
END
q(temp,'x')
Bug in Ruby? Or do I misunderstand something in the workings of the
parser?
Ronald
Not a bug in the parser, just wrong usage.
q(<<-END, 'x')
line1
line2
END
That will work.
Regards
Stefan
···
--
Posted via http://www.ruby-forum.com/\.
I have problems passing a HERE document as the first parameter
to a function expecting more than 1 parameter. Example:
# This is file here1.rb
def q(a,b)
end
q(<<-END
line1
line2
END
,'x')
Executing this program yields the error messages
./here1.rb:9: syntax error, unexpected ',', expecting ')'
,'x')
^
./here1.rb:9: syntax error, unexpected ')', expecting $end
I believe you have got the order wrong. Do it like this:
$ ruby -e 'def f(a,b) p a,b end
f(<<XXX, 123)
foo
bar
XXX'
"foo\nbar\n"
123
Using a temporary variable to hold the content of the HERE
string works fine though:
temp=<<-END
line1
line2
END
q(temp,'x')
Bug in Ruby? Or do I misunderstand something in the workings of the
parser?
The latter, see above. 
Kind regards
robert
···
2007/7/11, Ronald Fischer <ronald.fischer@venyon.com>:
While it works, it is, IMHO, ugly and a little obfuscated.
It is much better to simply assign the heredoc to a variable, and put the variable name in the function parameter.
I know it is a correct form, but some times linguistically correct is not always good for you. (most people know what I mean if I mention C )
John Joyce
···
On Jul 11, 2007, at 6:53 AM, Stefan Rusterholz wrote:
Ronald Fischer wrote:
I have problems passing a HERE document as the first parameter
to a function expecting more than 1 parameter. Example:
# This is file here1.rb
def q(a,b)
end
q(<<-END
line1
line2
END
,'x')
Executing this program yields the error messages
./here1.rb:9: syntax error, unexpected ',', expecting ')'
,'x')
^
./here1.rb:9: syntax error, unexpected ')', expecting $end
Using a temporary variable to hold the content of the HERE
string works fine though:
temp=<<-END
line1
line2
END
q(temp,'x')
Bug in Ruby? Or do I misunderstand something in the workings of the
parser?
Ronald
Not a bug in the parser, just wrong usage.
q(<<-END, 'x')
line1
line2
END
That will work.
Regards
Stefan
irb(main):072:0> def q(a,b)
irb(main):073:1> puts a
irb(main):074:1> puts b
irb(main):075:1> end
=> nil
irb(main):076:0> q('1',<<-END
irb(main):077:1" 2
irb(main):078:1" END
irb(main):079:1> )
1
2
=> nil
If correctness of usage depends on parameters order - is this a bug?
···
2007/7/11, Stefan Rusterholz <apeiros@gmx.net>:
Ronald Fischer wrote:
> I have problems passing a HERE document as the first parameter
> to a function expecting more than 1 parameter. Example:
>
> # This is file here1.rb
> def q(a,b)
> end
> q(<<-END
> line1
> line2
> END
> ,'x')
>
> Executing this program yields the error messages
>
> ./here1.rb:9: syntax error, unexpected ',', expecting ')'
> ,'x')
> ^
> ./here1.rb:9: syntax error, unexpected ')', expecting $end
>
> Using a temporary variable to hold the content of the HERE
> string works fine though:
>
> temp=<<-END
> line1
> line2
> END
> q(temp,'x')
>
> Bug in Ruby? Or do I misunderstand something in the workings of the
> parser?
>
> Ronald
Not a bug in the parser, just wrong usage.
q(<<-END, 'x')
line1
line2
END
That will work.
Regards
Stefan
--
Posted via http://www.ruby-forum.com/\.
HERE document as second parameter works:
Valeri Mytinski wrote:
irb(main):072:0> def q(a,b)
irb(main):073:1> puts a
irb(main):074:1> puts b
irb(main):075:1> end
=> nil
irb(main):076:0> q('1',<<-END
irb(main):077:1" 2
irb(main):078:1" END
irb(main):079:1> )
1
2
=> nil
If correctness of usage depends on parameters order - is this a bug?
I'm actually suprised, that your usage works.
puts('1', <<END)
2
END
That's how I'd have written it.
You can also use multiple
puts(<<FIRST, <<SECOND)
1
FIRST
2
SECOND
Or apply methods
puts(<<FIRST.upcase, <<SECOND.capitalize)
first
FIRST
second
SECOND
# (will print "FIRST" newline "Second")
Btw, no need for the 'q' method, puts can handle multiple arguments 
Regards
Stefan
···
--
Posted via http://www.ruby-forum.com/\.