Thanks, I filed an issue: https://github.com/JuliaLang/julia/issues/5609.
My original problem was that I had a 1 dimensional array of integers and I
needed to append a couple more to it and get back a single row 2 dim array.
I ended up solving that by constructing a 1dim array with commas and
without splat, and transposing that: [original, 3, 4]'
Sam
On Wednesday, January 29, 2014 1:31:00 PM UTC-8, Leah Hanson wrote:
>
> To solve the practical problem, you don't need the splicing operator there:
> ~~~
> julia> [[1, 2], 3, 4]
> 4-element Array{Int64,1}:
> 1
> 2
> 3
> 4
>
> julia> x = [1,2]
> 2-element Array{Int64,1}:
> 1
> 2
>
> julia> [x,3,4]
> 4-element Array{Int64,1}:
> 1
> 2
> 3
> 4
> ~~~
>
>
> The behavior does seem very strange to me too. It looks like it's caused
> by some change in structure:
>
> This is the example you gave:
> ~~~
> julia> [[1, 2]... 3 4]
> 1x4 Array{Int64,2}:
> 1 2 3 4
>
> julia> :([[1, 2]... 3 4])
> :($(Expr(:hcat, :([1,2]...), 3, 4)))
>
> julia> eval(ans)
> ERROR: unsupported or misplaced expression ...
> ~~~
>
> If we make the same hcat call directly, it works, but the expr has a
> different structure:
> ~~~
> julia> hcat([1,2]...,3,4)
> 1x4 Array{Int64,2}:
> 1 2 3 4
>
> julia> :(hcat([1,2]...,3,4))
> :(hcat([1,2]...,3,4))
>
> julia> eval(ans)
> 1x4 Array{Int64,2}:
> 1 2 3 4
> ~~~
> Notice that the [1,2]... part prints out differently than in the Expr
> above.
>
> Trying to recreate the [1,2]... Expr:
> ~~~
> julia> :([1,2]...) #this version has a comma in it, which the first
> version didn't.
> :([1,2]...,)
>
> julia> :([1,2]...).head
> :tuple
>
> julia> :([1,2]...).args
> 1-element Array{Any,1}:
> :([1,2]...)
>
> julia> :([1,2]...).args[1] #this looks like the part that caused the error
> above
> :([1,2]...)
>
> julia> :([1,2]...).args[1].head
> :...
>
> julia> eval(:([1,2]...).args[1])
> ERROR: unsupported or misplaced expression ...
> ~~~
> This error seems to be cause by evaluating a `...` without appropriate
> context.
>
> I was going to say that the splicing operator is supposed to only be on
> the last argument to a function, but that's only relevant to defining
> Varargs functions, not splatting things into calls.
> ~~~
> julia> +((1,)...,2)
> 3
>
> julia> :(+((1,)...,2))
> :(+((1,)...,2))
>
> julia> eval(:(+((1,)...,2)))
> 3
> ~~~
>
> This seems like a bug to me. I expect you should open an issue on github,
> because either neither or both of `[[1,2]... 3 4]` and `eval(:([[1,2]... 3
> 4]))` should work.
>
> -- Leah
>
> On Tue, Jan 28, 2014 at 11:55 PM, Sam L <[email protected]
> <javascript:>>wrote:
>
>> Hi everyone,
>>
>> When I evaluate this expression in the REPL, things work:
>>
>> julia> [[1, 2]... 3 4]
>> 1x4 Array{Int64,2}:
>> 1 2 3 4
>>
>> However, if I try to assign the result to a variable, I get an error:
>>
>> julia> row = [[1, 2]... 3 4]
>> ERROR: unsupported or misplaced expression ...
>>
>> Same with evaluating the quoted expression:
>>
>> julia> eval(:( [[1, 2]... 3 4]))
>> ERROR: unsupported or misplaced expression ...
>>
>> For what I was doing, I ended up not needing expressions like the above,
>> but I'm curious as to what went wrong.
>>
>> Anybody know what's going on here?
>>
>> Thanks!
>> Sam
>>
>
>