Quick actions

cmd+k|ctrl+k

Navigation

Languages

Untitled

Snippet info

Language

Nim

Visibility

unlisted

Author

legacy-anonymous

Created

2017-03-16T23:14:06Z

Updated

2017-03-16T23:14:06Z

{.experimental.}

type K = enum
  ka,kb

type A = object
  case kind: K
  of ka: innerAdata:int
  of kb: innerBdata:string

proc a():A = A(kind:ka)

var an = a()

proc `.=`[T](m:var A, field:string, val:T) = 
  echo "Dot operator assignment overload called!", field
  if field == "adata":
    if m.kind != ka:
      m.reset
      m.kind = ka
    m.innerAdata = val 
  elif field == "bdata":
    if m.kind != kb:
      m.reset
      m.kind = kb
    m.innerBdata = val # this branch conflicts with the above branch, the type cant be both int and string 

proc adata(m:A): int =
  result = m.innerAdata

proc bdata(m:A): int =
  result = m.innerAdata

an.adata = 5
echo an.kind, an.adata
an.adata = 6
echo an.kind, an.adata
an.bdata = "hello"
echo an.kind, an.bdata
INFO