I don't think that you need nor that you should use generated functions. But maybe I'm wrong, what are you trying to achieve? This should work as you want:
function testfun2!{N}(X,Y::NTuple{N,Float64}) for i in eachindex(X), j in 1:N # much better to have the loop this way X[i][j] = Y[j] end return X end # Setup for function call InnerArrayPts = 3 OuterArrayPts = 10 Xinput = [Array{Float64}(InnerArrayPts) for r in 1:OuterArrayPts] Yinput = rand(InnerArrayPts) testfun2!(Xinput,tuple(Yinput...)) On Tue, 2015-09-29 at 13:20, Alan Crawford <a.r.crawf...@gmail.com> wrote: > I would like to preallocate memory of an array of arrays and pass it to a > function to be filled in. I have created an example below that illustrates > my question(s). > > Based on my (probably incorrect) understanding that it would be desirable > to fix the type in my function, I would like to be able to pass my array of > arrays, X, in a type stable way. However, I can't seem to pass > Array{Array{Float64,N},1}. If, however, i do not attempt to impose the type > on the function, it works. > > Is there a way to pass Array{Array{Float64,N},1 to my function? Do I even > need to fix the type in the function to get good performance? > > # version of Julia: 0.4.0-rc3 > > @generated function > testfun1!{N}(X::Array{Array{Float64,1},1},Y::NTuple{N,Float64}) > quote > for j in 1:$N, i in eachindex(X) > X[i][j] = Y[j] > end > return X > end > end > > @generated function testfun2!{N}(X,Y::NTuple{N,Float64}) > quote > for j in 1:$N, i in eachindex(X) > X[i][j] = Y[j] > end > return X > end > end > > # Setup for function call > InnerArrayPts = 3 > OuterArrayPts = 10 > Xinput = [Array{Float64}(InnerArrayPts) for r in 1:OuterArrayPts] > Yinput = rand(InnerArrayPts) > > # Method Error Problem > testfun1!(Xinput,tuple(Yinput...)) > > # This works > testfun2!(Xinput,tuple(Yinput...)) > > I also tried with the following version of testfun1!() and again got a > method error. > > @generated function > testfun1!{N}(X::Array{Array{Float64,N},1},Y::NTuple{N,Float64}) > quote > for j in 1:$N, i in eachindex(X) > X[i][j] = Y[j] > end > return X > end > end > > > I am sure i am misunderstanding something quite fundamental and/or missing > something straightforward... > > Thanks, > Alan