To be a little more explicit.  You are "masking" the function `Base.length`
with your local variable `length`.  So when you write `length(range)` you
are trying to "call" your local variable like it's a function.

On Tue, Nov 10, 2015 at 9:47 AM, Yichao Yu <yyc1...@gmail.com> wrote:

> On Tue, Nov 10, 2015 at 9:37 AM, Ben Ward <axolotlfan9...@gmail.com>
> wrote:
> > Hi,
> >
> > You can get the length of a StepRange:
> >
> > julia> length(2:1:9)
> >
> >
> > 8
> >
> >
> > But if I try to do so inside a function I get an error about not finding
> a
> > call method:
> >
> > julia> function myfun(width::Int, step::Int, length::Int)
>
>
> ^^^^^^^^^^^^^
>
> You override the value of `length`here.
>
> >
> >
> >            clip = Int(floor(width / 2))
> >
> >
> >            start = 1 + clip
> >
> >
> >            stop = length - clip
> >
> >
> >            range = StepRange(start, step, stop)
> >
> >
> >            return length(range)
> >
> >
> >        end
> >
> >
> > myfun (generic function with 1 method)
> >
> >
> >
> >
> > julia> myfun(3, 1, 10)
> >
> >
> > ERROR: MethodError: `call` has no method matching call(::Int64,
> > ::StepRange{Int64,Int64})
> >
> >
> > Closest candidates are:
> >
> >
> >   BoundsError()
> >
> >
> >   BoundsError(::Any...)
> >
> >
> >   DivideError()
> >
> >
> >   ...
> >
> >
> >  in myfun at none:6
> >
> >
> > I don't know why this is, the range constructed with the function call
> > `myfun(3,1,10` should be the same range as 2:1:9. Why is this happening?
> >
> > Thanks,
> > Ben.
>

Reply via email to