Thanks @mashingan. My intention is to bring up a point (that popped up in an
earlier post that I can't find) in which @araq and others that I can't
remember, were talking about flexing out the restrictions, to allow duplication
of either field labels or field names, when used in the case discrimination
block for object variants. I could not find the post to append this case though.
In fact I made my example short enough for the forum, but I was trying to
reduce a longer set of object types that looks like your first workaround, into
a single object variant. Nesting objects is for sure what works since the 80's
and 90's (i.e. I used it a lot in Turbo Pascal). The issue is that then you
require double indexing like pointA.cyl.phi, instead of something like
polarA.phi, but I can live with that.
Your second workaround is kind of cumbersome due to the need of exceptions, but
i'll explore more about such approach. It gave me some enlightenment in an
operator overload like x= (I didn't know you could use a proc name with it, and
that's a nice feature.
What I'm trying to do, is to merge a large group of coordinate systems (not
only 3D but from 1-D to N-D) into a single one, while exploring the
possibilities in Nim, and that's how I got stuck. So it gets larger and larger
as you start implementing (I have not yet, but a good initial type definition
is the clue for a nice and intuitive library). Here the idea, still in its
infancy:
type
#===========================================================================================================================================
# COORDINATE SYSTEM NOTATION RULE DIM BUs PRINT
($) (ARGUMENTS) NOTES
#===========================================================================================================================================
CoordinateSystem* = enum
csC1D, # Cartesian 1-D or Line Number __ RHR __ 1-D __ L __ (x)
_________________ (x) ____________________ [ ]
csC2D, # Cartesian 2-D or Polar ________ RHR __ 2-D __ LL __ (x, y)
______________ (x, y) _________________ [ ]
csC3D, # Cartesian 3-D _________________ RHR __ 3-D __ LLL __ (x, y,
z) ___________ (x, y, z) ______________ [ ]
csCar, # Cartesian N-D _________________ RHR __ N-D __ L-L __ (x0,
x1,... xN-1) ___ (x[0] .. x[n-1]) _______ [ x0=x, x1=y, x2=z ]
csPol, # Polar _________________________ RHR __ 2-D __ LA __ (r, φ)
______________ (r, phi) _______________ [ φ=azimuthal_a ]
csCyl, # Cylindrical ___________________ RHR __ 3-D __ LAL __ (r, φ,
z) ___________ (r, phi, z) ____________ [ φ=azimuthal_a ]
csSph, # Spherical _____________________ RHR __ 3-D __ LAA __ (ρ, θ,
φ) ___________ (rho, theta, phi) ______ [ θ=polar_a, φ=azimuthal_a ]
#[not defined (yet)
# Orthogonal 2-D candidates
csLin, # Line Number ___________________ RHR __ 1-D __ L __ (x)
_________________ (x) ____________________ [ csLin=csC1D ]
csPla, # Planar ________________________ RHR __ 2-D __ LL __ (x, y)
______________ (x, y) _________________ [ csPla=csC2D ]
csEuc, # Euclidean _____________________ __ __ __
____________________
csOrt, # Orthogonal ____________________ __ __ __
____________________
csCur, # Curvilinear ___________________ __ __ __
____________________
csHSp, # Hyperspherical ________________ __ __ __
____________________
csPar, # Parabolic 2-D _________________ __ __ __
____________________
csEll, # Elliptic 2-D __________________ __ __ __
____________________
cs1CB, # One Center Bipolar ____________ __ 2-D __ LA __ (σ, τ)
______________ (sigma, tau)
cs2CB, # Two Center Bipolar ____________ __ 2-D __ LL __ (r1, r2)
____________ (r1, r2)
csBAn, # Biangular _____________________ __ 2-D __ AA __ (θ1, θ2)
____________ (thheta1, thheta2)
csLoP, # Logaritmic Polar ______________ __ 2-D __ LA __ (ρ, θ)
______________ (rho, theta)
csHom, # Homogeneous ___________________ __ 3-D __ LLL __ (x : y :
z) _________ (x, y, z)
csGeo, # Geographic or Geodesic ________ __ 3-D __ AAL __ (φ, λ,
h) ___________ (phi, lambda, h) or (lat, lon, ele)
csHor, # Celestial Horizontal __________ __ 2-D __ AA __ (a, A)
______________ (al, az)
cdEqu, # Celestial Equatorial __________ __ 2-D __ AA __ (δ, α)
______________ (delta, alpha)
csEcl, # Celestial Ecliptic ____________ __ 2-D __ AA __ (β, λ)
______________ (beta, lambda)
csGal, # Celestial Galactic ____________ __ 2-D __ AA __ (b, l)
______________ (b, l)
csSup # Celestial Supergalactic _______ __ 2-D __ AA __ (SGB,
SGL) __________ (sgb, sgl)
]#
csErr # Used if a wrong parameter count for the selected Coordinate
System was entered
#===========================================================================================================================================
Run