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