On Wed, 2016-03-23 at 16:48, kunal singh <ks250...@gmail.com> 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

But those methods can be called through basic as well as number and
basic are identical:

julia> m = basic(4.5)
basic("I am Function C from number via number's outer constructor")

>
> 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 <ks25...@gmail.com> 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)
>>>
>>>
>>>
>>> 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 <maur...@runbox.com> 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 <ks25...@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
>>>>>
>>>>
>>>>

Reply via email to