Ok, thanks. I got the idea.
On Tuesday, January 21, 2014 8:31:19 PM UTC+4, Stefan Karpinski wrote: > > Julia's singleton types are abstract types whose only instance is a single > type object. This is useful for writing methods that dispatch on type > values rather than on the type of an argument. They are abstract types – > they don't have fields and they don't hold data. > > If you want an object to store some values, define a type and make a > single instance of it: > > type CParam > rho::Float64 > cc::Float64 > end > const cparam = CParam(0,0) > > > Now use cparam as your "singleton" – if you don't want more than one > instance, don't create more than one. > > > > On Tue, Jan 21, 2014 at 10:57 AM, Alexander Samoilov < > [email protected] <javascript:>> wrote: > >> Hello Experts! >> >> After reading Julia docs on types it is still unclear for me how how to >> use singleton classes for common tasks, e.g. for packaging some common >> values. >> >> As a side note let me elaborate with the example from Scala programming >> language. >> Scala has intrinsic support for singletons - Objects. >> >> ```scala >> scala> object CParam { >> | var rho: Double = 1.0 >> | var cc: Double = 1.0 >> | } >> defined module CParam >> >> scala> CParam.rho = 2.0 >> CParam.rho: Double = 2.0 >> >> scala> import CParam._ >> import CParam._ >> >> scala> rho >> res0: Double = 2.0 >> ``` >> >> Now trying to project it to Julia: >> >> ```jlcon >> julia> type CParam >> rho::Float64 >> cc::Float64 >> function CParam() >> new(0.0, 0.0) >> end >> end >> >> julia> x = CParam() >> CParam(0.0,0.0) >> >> julia> x.rho >> 0.0 >> ``` >> >> So good so far, though this is not a singleton, just an instance. >> The Julia documentation says that parametric Type{T} is a special >> parametric kind of the type T - the singleton type. >> >> >> ```jlcon >> julia> x = Type{CParam} >> Type{CParam} >> >> julia> x.rho >> ERROR: type DataType has no field rho >> ``` >> >> Trying to exploit modules as model for singleton class (follow Fortran90 >> - it uses modules for information hiding and packaging). >> >> ```jlcon >> julia> module CParam >> export rho, bulk, cc, zz >> rho = 1.0 >> bulk = 1.0 >> cc = 1.0 >> zz = 1.0 >> end >> >> julia> CParam.rho = 2.0 >> ERROR: cannot assign variables in other modules >> ``` >> Could you please recommend a programming idiom better fitting to Julia? >> >> Thanks! >> Alexander >> >> >
