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