Yes, though as Simon points out there is a good reason why it doesn't work.
On Sunday, June 14, 2015 at 11:25:47 PM UTC-4, Ranjan Anantharaman wrote:
>
> @David, What doesn't work for you? Do you mean you're getting the same
> error?
>
> On Monday, 15 June 2015 08:55:07 UTC+5:30, Ranjan Anantharaman wrote:
>>
>> But Simon, Julia allows me to define this composite type. There just
>> doesn't seem to be any obvious way to create an object of that type.
>>
>> Additionally, writing the type that way results in the same error.
>>
>> On Sunday, 14 June 2015 17:10:56 UTC+5:30, Simon Danisch wrote:
>>>
>>> Julia is not object oriented, so you only put constructors inside the
>>> type definition, which are then inner constructors.
>>> Inner constructors overwrite the default constructor, so the function
>>> boss() replaces foo(::Int64).
>>> What you probably want is:
>>> type foo
>>> a::Int
>>> end
>>> function boss(::foo)
>>> println("Hey, boss!")
>>> end
>>> Am Sonntag, 14. Juni 2015 13:26:28 UTC+2 schrieb Ranjan Anantharaman:
>>>>
>>>> Hello,
>>>>
>>>> How do I initialize this composite type in Julia?
>>>>
>>>> type foo
>>>> a::Int64
>>>> function boss()
>>>> println("Hey, boss!")
>>>> end
>>>> end
>>>>
>>>> If I do f = foo(1), then I get the following error:
>>>>
>>>> ERROR: MethodError: `convert` has no method matching
>>>> convert(::Type{foo}, ::Int64)
>>>> This may have arisen from a call to the constructor foo(...),
>>>> since type constructors fall back to convert methods.
>>>> Closest candidates are:
>>>> call{T}(::Type{T}, ::Any)
>>>> convert{T}(::Type{T}, ::T)
>>>> in call at base.jl:40
>>>>
>>>> How do I create an object of type foo?
>>>>
>>>> Thanks in advance.
>>>>
>>>