Yes. I tried it, and it indeed went into an infinite recursion.
On Sunday, April 26, 2015 at 10:06:57 AM UTC+2, Mauro wrote:
>
> > Thank you! For this question, invoke indeed a good solution :)
> >
> > How about a more general case. For example, I already have a function
> foo
> > foo(X::Int)=X+1
> > in the environment.
> >
> > Then I want to overload foo to forbid negative input:
> > function foo(X::Int)
> > @assert(X>=0,"X should be a positive number.")
> > invoke(foo,(Int,),X)#Here, I hope to call the original definition of
> > foo.
> > end
> >
> > However, invoke doesn't work as I expected in this case. Is there any
> other
> > solution?
>
> I don't think there is. There can only be one method for each signature
> for one generic function. So above gets you into an infinite recursion.
>
> > On Sunday, April 26, 2015 at 8:40:06 AM UTC+2, Sam L wrote:
> >>
> >> See ?invoke.
> >>
> >> display(X::Vector)=length(X)>10?print("Too long to show."):
> >> invoke(display, (Any,), X)
> >>
> >> On Saturday, April 25, 2015 at 10:41:39 PM UTC-7, Jerry Xiong wrote:
> >>>
> >>> For example, if I want to overload the Base.display(::Vector) to
> repress
> >>> the display when the vector is too long, I coded as below:
> >>> julia> import Base.display
> >>>
> >>> julia> display(X::Vector)=length(X)>10?print("Too long to
> show."):Base.
> >>> display(X)
> >>> display (generic function with 17 methods)
> >>>
> >>> julia> display([1,2,3])
> >>> ERROR: stack overflow
> >>> in display at none:1 (repeats 39998 times)
> >>>
> >>> I want to call the original Base.display when the length of vector is
> >>> less than 10, but it is became a dead recurring. Is there any way to
> do it?
> >>>
> >>
>
>