Another possibility is to use a module with declared constants. module CParam export rho, cc # the exports are optional but allows you to type "using CParam" and use rho and cc without CParam prefix
const rho = 3.2 const cc = 54.4 end Or you can just use rho and cc as global constants. Just one word of caution. If you want performance you need to remember the "const" declaration. Currently the julia runtime system assumes that globals might change their type at any point, so it will have to check the type every time it reads the variable. Ivar kl. 17:42:18 UTC+1 tirsdag 21. januar 2014 skrev Alexander Samoilov følgende: > > 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]> 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 >>> >>> >>
