Syntax error with array interpolation

R

Ronald Fischer

Below is a code snippet which gives me some headache:

def headache
yield(*(foo(1)),"bar")
end

def foo(n)
[n,n+2,n+5]
end

headache { |a,b,c,d| puts a.to_s; puts b.to_s; puts c.to_s; puts d }

I had expected that this would print

1
3
6
bar


But Ruby 1.8.5 complains:

/headache.rb: line 1: def: command not found
/headache.rb: line 2: syntax error near unexpected token `*'
'/headache.rb: line 2: ` yield(*(foo(1)),"bar")

and Ruby 1.8.6 complains:

H:/tmp/headache.rb:2: syntax error, unexpected tSTRING_BEG, expecting
tAMPER
yield(*(foo(1)),"bar") ^
H:/tmp/headache.rb:2: syntax error, unexpected ')', expecting kEND
H:/tmp/headache.rb:10: syntax error, unexpected $end, expecting kEND


There must something be wrong with the way I'm doing array
interpolation,
but I can't spot the error....

Ronald
--=20
Ronald Fischer <[email protected]>
Phone: +49-89-452133-162
=20
 
D

Daniel Lucraft

Ronald said:
Below is a code snippet which gives me some headache:

def headache
yield(*(foo(1)),"bar")
end

You can't use a 'splatted' array anywhere in a method call except at the
end:

def foo(a, b, c)
p [a, b, c]
end

foo(1, 2, *[3]) #=> works
foo(1, *[3], "asdf") #=> doesn't work

I'm not quite sure why this should be, since it has an unambiguous
meaning, unlike defining a method with a splat in the middle of the
arguments:

def bar(a, *b, c=0)
...
end

The splat operator is a bit mysterious to me in this regard.....

best,
Dan
 
D

Daniel Lucraft

Daniel said:
You can't use a 'splatted' array anywhere in a method call except at the
end:

Pardon me: and before a block argument:
foo(1, 2, *[3], &block)

Dan
 

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

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top