You're getting confused by what the value of an assignment expression is. This is what I think you're hoping your code does (but it doesn't do that):
function makestring(fun) A::Array{ASCIIString} = [fun(i) for i = 1:3] return A end -- John On Oct 29, 2014, at 10:57 AM, Zenna Tavares <zennatava...@gmail.com> wrote: > Ok, but then why does it return the Vector{Any}. The following two functions > give different results > > function makestring(fun) > A::Array{ASCIIString} = [fun(i) for i = 1:3] > end > > > function makestring(fun) > A::Array{ASCIIString} = [fun(i) for i = 1:3] > convert(Array{ASCIIString},A) > end > > I thought maybe it was a weird REPL thing, but it's not. > > On Wednesday, October 29, 2014 1:52:01 PM UTC-4, John Myles White wrote: > I'm pretty sure this sort of thing always works since type declarations on > variables behave like convert calls: > > julia> function foo() > a::Int64 = 0x01 > return a > end > foo (generic function with 1 method) > > julia> foo() > 1 > > -- John > > On Oct 29, 2014, at 10:50 AM, Zenna Tavares <zennat...@gmail.com> wrote: > > > Also, the following runs but still returns a Vector{Any}. How is this > > possible? > > > > function makestring(fun) > > A::Array{ASCIIString} = [fun(i) for i = 1:3] > > end > > > > > > On Wednesday, October 29, 2014 1:45:51 PM UTC-4, Zenna Tavares wrote: > > As shown in the following example, I am getting differently typed arrays > > depending on where I use the list comprehension. > > > > f(i) = "$i" > > A = [f(i) for i = 1:3] > > function makestring(fun) > > A = [fun(i) for i = 1:3] > > end > > B = makestring(f) > > > > In this example A has type Vector{ASCIIString} while B has type > > Vector{Any}. What gives? And is there a workaround such that we get a more > > specific type? > > > > I understand there are some open issues related to this, but I am not sure > > if this case comes under what's already been discussed. > > > > >