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. 
> > 
> > 
> 

Reply via email to