And also @Mauro, Aren't the methods here ,that is,  the constructors linked 
to their respective  types

On Wednesday, March 23, 2016 at 9:24:01 PM UTC+5:30, kunal singh wrote:
>
>
>
> On Wednesday, March 23, 2016 at 9:18:06 PM UTC+5:30, kunal singh wrote:
>>
>> *the code works!!*
>> I know that number== basic
>> But the adding methods to number makes it ,from execution point of view , 
>> an inherited class 
>>
>> On Wednesday, March 23, 2016 at 7:25:16 PM UTC+5:30, Stefan Karpinski 
>> wrote:
>>>
>>> Doing
>>>
>>> typealias B Union{A}
>>>
>>> makes B the same as A. Is this code meant to work today or is this 
>>> something you're proposing should work?
>>>
>>> On Wednesday, March 23, 2016, kunal singh <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> I wrote a sample code which explains how inheritance can be done in 
>>>> Julia 
>>>> Let me explain what the code is about 
>>>> There is a Base Class : basic
>>>> it contains two functions A and B
>>>>
>>>> Then there is number class which inherits from basic
>>>> and number has its own Function C
>>>> So number has in total three Functions A, B and C
>>>>
>>>>   there is integer class which inherits from number
>>>> and integer has its own Function D
>>>> So integer has in total Four Functions A, B, C and D
>>>>
>>>> So what my code will be doing : I will be entering each class and 
>>>> printing all the function available in the particular class
>>>>
>>>> type basic
>>>>     x::AbstractString
>>>>     function basic()
>>>>         z = new()
>>>>         return z       
>>>>     end
>>>>     
>>>>     function basic(p::AbstractString) # Defining Function A
>>>>         z = new(p)
>>>>         return z       
>>>>     end
>>>> end
>>>>
>>>> function basic(p::Int) #Defining Function B
>>>>         z = basic()
>>>>         z.x = "I am Function B from basic via outer constructor"
>>>>         return z       
>>>> end
>>>>
>>>> println("Entering basic")
>>>> println("Calling Function A...")
>>>> m = basic("I am Function A from basic via inner constructor")
>>>> println(m.x)
>>>>
>>>> println("Calling Function B...")
>>>> m = basic(0)  
>>>> println(m.x)
>>>>
>>>>
>>>> typealias number Union{basic}
>>>>
>>>> function number(p::Float64)   # Defining Function C
>>>>     z = basic()
>>>>     z.x = "I am Function C from number via number's outer constructor"
>>>>     return z
>>>> end 
>>>>
>>>> println("number inherits basic ")
>>>> println("Entering number")
>>>>
>>>> println("Calling Function A...")
>>>> m = number("I am Function A of basic via basic's inner constructor")
>>>>  println(m.x)
>>>>
>>>> println("Calling Function B...")
>>>> m = number(10)
>>>> println(m.x)
>>>>
>>>> println("Calling Function C...")
>>>> m = number(4.5)
>>>> println(m.x)
>>>>
>>>>
>>>> typealias integer Union{number}
>>>>
>>>> println("integer inherits number ")
>>>> println("Entering integer")
>>>>
>>>> println("Calling Function A...")
>>>> m = number("I am Function A of basic via basic's inner constructor")
>>>>  println(m.x)
>>>>
>>>> println("Calling Function B...")
>>>> m = number(10)
>>>> println(m.x)
>>>>
>>>> println("integer inherits number Calling Function C...")
>>>> m = integer(5.6)
>>>> println(m.x)
>>>>
>>>> function integer(p::Float64)  #Defining Function D
>>>>     z = basic()
>>>>     z.x = "I am Function D from integer via integer's outer constructor"
>>>>     return z
>>>> end 
>>>>
>>>> println("Calling Function D...")
>>>> m = integer(5.6)
>>>> println(m.x)
>>>>
>>> *Output :* 
>
>   * Entering basic*
> *Calling Function A...*
> *I am Function A from basic via inner constructor*
> *Calling Function B...*
> *I am Function B from basic via outer constructor*
> *number inherits basic *
> *Entering number*
> *Calling Function A...*
> *I am Function A of basic via basic's inner constructor*
> *Calling Function B...*
> *I am Function B from basic via outer constructor*
> *Calling Function C...*
> *I am Function C from number via number's outer constructor*
> *integer inherits number *
> *Entering integer*
> *Calling Function A...*
> *I am Function A of basic via basic's inner constructor*
> *Calling Function B...*
> *I am Function B from basic via outer constructor*
> *integer inherits number Calling Function C...*
> *I am Function C from number via number's outer constructor*
> *Calling Function D...*
> *I am Function D from integer via integer's outer constructor*
>  
>
>>
>>>>
>>>> On Tuesday, March 22, 2016 at 11:01:25 PM UTC+5:30, Stefan Karpinski 
>>>> wrote:
>>>>>
>>>>> Read through the julia-dev thread I linked to – this is addressed in 
>>>>> depth there.
>>>>>
>>>>> On Tue, Mar 22, 2016 at 12:55 PM, Mauro <[email protected]> wrote:
>>>>>
>>>>>> > By the way isn't type Basic in my code a composite type?
>>>>>>
>>>>>> Basic is defined both as `type` and as `abstract` which will error.
>>>>>>
>>>>>> > So is there any way of inheritance among composite types ?
>>>>>>
>>>>>> No.
>>>>>>
>>>>>> > Also is there any libraries which I can refer to which uses 
>>>>>> extensive
>>>>>> > inheritance?
>>>>>> >
>>>>>> > In C++ we can easily inherit classes ? Why don't we have such ease 
>>>>>> in Julia ?
>>>>>>
>>>>>> Because Julia is designed this way.  Because with the ease also comes 
>>>>>> pain.
>>>>>>
>>>>>> > On Tuesday, March 22, 2016 at 9:20:19 PM UTC+5:30, Stefan Karpinski 
>>>>>> wrote:
>>>>>> >
>>>>>> >     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 <
>>>>>> [email protected]> 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 <
>>>>>> [email protected]>
>>>>>> >             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
>>>>>>
>>>>>
>>>>>

Reply via email to