You can also use `map`, which is better at type inference:
julia> M=10
10
julia> [[i] for i=1:M]
10-element Array{Any,1}:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
julia> map(x->[x],1:M)
10-element Array{Array{Int64,1},1}:
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
On Friday, October 16, 2015 at 4:37:26 PM UTC+2, Yichao Yu wrote:
>
> On Fri, Oct 16, 2015 at 10:23 AM, Tomas Lycken <[email protected]
> <javascript:>> wrote:
> > If you execute this in a function, or in a script file, this won’t
> happen.
> >
> > The problem when doing it in the REPL is that Julia can’t know what you
> will
> > do with the list variable in the future, so it has to be very defensive
> with
> > type inference, to avoid having to throw nasty type errors later.
>
> The issue is related to type inference in global scope but,
>
> 1. Putting in a script won't help because it's still in the global scope
> 2. The issue isn't about future use of list, is't about `M`. Julia
> have no way to garentee that the type of M is always constant when
> it's using it (yes, in this case it doesn't change but the compiler
> cannot know that before running your code)
> 3. const M = 10 should work
> 4. putting this in a function should also work
> 5. There's also discussion about type-inference-free comprehensions.
>
> >
> > // T
> >
> > On Friday, October 16, 2015 at 4:19:54 PM UTC+2, Thuener Silva wrote:
> >>
> >> I want to create an array of arrays of int64. But sometimes the type
> >> change to Any, why? It is a bug?
> >>
> >> julia> M = 10
> >> julia> typeof(M)
> >> Int64
> >>
> >> julia> list = [[i] for i=1:M]
> >> 10-element Array{Any,1}:
> >> [1]
> >> [2]
> >> [3]
> >> [4]
> >> [5]
> >> [6]
> >> [7]
> >> [8]
> >> [9]
> >> [10]
> >>
> >> list = [[i] for i=1:10]
> >> 10-element Array{Array{Int64,1},1}:
> >> [1]
> >> [2]
> >> [3]
> >> [4]
> >> [5]
> >> [6]
> >> [7]
> >> [8]
> >> [9]
> >> [10]
> >>
> >> Grats,
> >> Thuener Silva
> >>
> >
>