I even tried below code, but it still went into an infinite recursion: foo2=copy(foo) function foo(X::Int) @assert(X>=0,"X should be a positive number.") foo2(X) end Since the copy or deepcopy can not really copy a function but still just be a reference of it.
On Sunday, April 26, 2015 at 10:22:34 AM UTC+2, Jerry Xiong wrote: > > 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? >> >>> >> >> >> >>