Have a read on this oldish thread: https://groups.google.com/forum/#!topic/julia-dev/eA4VkFAD-yQ. Still applies today.
On Tue, Mar 22, 2016 at 11:30 AM, kunal singh <ks250...@gmail.com> wrote: > > > On Tuesday, March 22, 2016 at 8:43:50 PM UTC+5:30, Mauro wrote: >> >> > Hi Mauro , >> > >> > Can you show me any example ? >> > I am a beginner in Julia. It would of great help for me. >> >> In Julia the number types are defined here: >> >> https://github.com/JuliaLang/julia/blob/fdbcdf78bf0106e609a8d83b9e896d2d11bae594/base/boot.jl#L156 >> >> So there are the abstract types: >> >> abstract Number >> abstract Real <: Number >> abstract AbstractFloat <: Real >> abstract Integer <: Real >> abstract Signed <: Integer >> abstract Unsigned <: Integer >> >> and then there are concrete subtypes. For example a few integer types: >> >> bitstype 8 Bool <: Integer >> bitstype 64 Int64 <: Signed >> bitstype 64 UInt64 <: Unsigned >> >> >> > On Tuesday, March 22, 2016 at 8:01:47 PM UTC+5:30, Mauro wrote: >> > >> > You can only inherit from abstract types. Also, first defining >> > >> > type number >> > ... >> > end >> > >> > and then >> > >> > abstract number >> > >> > is not possible. It cannot be both abstract and concrete. (Also >> note >> > that types are by convention Captialized). >> > >> > So build your hierarchy only with abstract types and make concrete >> types >> > of some of the abstract ones. > > *Can you explain this point please ?* >> > On Tue, 2016-03-22 at 15:26, kunal singh <ks25...@gmail.com> >> wrote: >> > > So basically there is a type called Basic defined as follows >> > > >> > > type Basic >> > > ptr::Ptr{Void} >> > > function Basic() >> > > z = new(C_NULL) >> > > ccall((:basic_new_stack, :libsymengine), Void, (Ptr{Basic}, ), >> &z) >> > > finalizer(z, basic_free) >> > > return z >> > > end >> > > end >> > > >> > > Now I want to create a hierarchy: integer(not Integer)< >> number(not >> > Number) < >> > > Basic >> > > >> > > But in Julia, we cannot inherit from concrete type So what should >> I Do?? >> > > >> > > Here's My approach >> > > >> > > abstract Basic >> > > >> > > type number <: Basic >> > > ptr::Ptr{Void} >> > > function number() >> > > z = new(C_NULL) >> > > ccall((:basic_new_stack, :libsymengine), Void, (Ptr{Basic}, ), >> &z) >> > > finalizer(z, basic_free) >> > > return z >> > > end >> > > end >> > > >> > > abstract number >> > > >> > > type integer <: number >> > > ptr::Ptr{Void} >> > > function integer() >> > > z = new(C_NULL) >> > > ccall((:basic_new_stack, :libsymengine), Void, (Ptr{Basic}, ), >> &z) >> > > finalizer(z, basic_free) >> > > return z >> > > end >> > > end >> > > >> > > >> > > Please tell me if I am wrong ? >> > > Need help from >> >