Article: Writing Julia style multiple dispatch code in D
Jean-Louis Leroy via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Wed Aug 30 13:40:38 PDT 2017
On Wednesday, 30 August 2017 at 17:16:59 UTC, data pulverizer
wrote:
> On Wednesday, 30 August 2017 at 17:14:37 UTC, data pulverizer
> wrote:
>> On Wednesday, 30 August 2017 at 16:45:19 UTC, data pulverizer
>> wrote:
>>> You mentioned Julia in your article, however for clarity I
>>> would point out that Julia doesn't have OOP-type
>>> polymorphism. There is no notion of being able to do
>>> something like:
>>>
>>> Animal snoopy = new Dog();
>>
>> p.s. my bad, I was wrong about that! Turns out you can do
>> something like this in Julia (apologies for the Julia code in
>> a D forum):
>>
>> abstract type Animal end
>> struct Dog <: Animal end
>> struct Cat <: Animal end
>>
>> x = Array{Animal}(3)
>> x[1] = Cat(); x[2] = Dog(); x[3] = Cat();
>> x # returns
>> 3-element Array{Animal,1}:
>> Cat()
>> Dog()
>> Cat()
>
> p.p.s
>
> typeof(x[1]) # returns Cat
>
> so it isn't really polymorphism - the object is never converted
> to the "parent" type! Lol ... sorry for the confusion!
>> Which is polymorphism
After mulling over this example, I don't see how this proves that
Julia does *not* support run time polymorphism. On the contrary.
If you translate this to D you get the same result by the way:
import std.stdio;
class Animal {}
class Cat : Animal {}
void main()
{
Animal[] array;
array ~= new Cat();
writeln(typeid(array[0])); // typeid.Cat
}
More information about the Digitalmars-d-announce
mailing list