When you have an object type variable, you cannot make ref objects to point it. 
Unlike pointers, ref types cannot point to arbitrary memory location. It can 
points to specific object created with `RefObjTypeName(param0: x)` or 
[new](https://nim-lang.org/docs/system.html#new%2Cref.T) proc. I wrote about a 
difference between ref object and plain object: 
<https://internet-of-tomohiro.pages.dev/nim/faq.en#type-when-to-use-ref-object-vs-plain-object-qmark>

Example code:
    
    
    type
      Point = ref object
        x, y: float
      
      Triangle = ref object
        points: array[3, Point]
      
      Mesh = object
        points: seq[Point]
        triangles: seq[Triangle]
    
    var mesh: Mesh
    mesh.points.add Point(x: 0.0, y: 1.0)
    mesh.points.add Point(x: 1.0, y: 0.0)
    mesh.points.add Point(x: 0.0, y: 1.0)
    var tri = Triangle(points: [mesh.points[0], mesh.points[1], mesh.points[2]])
    mesh.triangles.add tri
    
    echo mesh
    
    Run

Or use index to indirectly refer objects in seq. Example code:
    
    
    type
      Point = object
        x, y: float
      
      Triangle = object
        points: array[3, int]
      
      Mesh = object
        points: seq[Point]
        triangles: seq[Triangle]
    
    var mesh: Mesh
    mesh.points.add Point(x: 0.0, y: 1.0)
    mesh.points.add Point(x: 1.0, y: 0.0)
    mesh.points.add Point(x: 0.0, y: 1.0)
    var tri = Triangle(points: [0, 1, 2])
    mesh.triangles.add tri
    
    echo mesh
    echo mesh.points[mesh.triangles[0].points[0]]
    
    Run

`cast` and `addr` are unsafe features in Nim. They are rarely used unless you 
use C libraries. 

Reply via email to