Foo = ref object of RootObj ... proc baz(this: Foo, arg: string) = do_something_with_foo(arg) Bar = ref object of RootObj _items: Table[string, Foo] # _items is private member ... proc items(this: Bar): Table[string, Foo] = this._items # Now, I want to use this var b = newBar() # _items populated b.items["key"].baz("some argument") # How to do this ? # Compiler says Error: type mismatch Expression: `[]`(items(b), "key") [1] items(b): Table[system.string, Foo] [2] "key": string Expected one of (first mismatch at [position]): [0] proc `[]`(s: string; i: BackwardsIndex): char [0] proc `[]`(s: var string; i: BackwardsIndex): var char [0] proc `[]`[I: Ordinal; T](a: T; i: I): T [0] proc `[]`[Idx, T; U, V: Ordinal](a: array[Idx, T]; x: HSlice[U, V]): seq[T] [0] proc `[]`[Idx, T](a: array[Idx, T]; i: BackwardsIndex): T [0] proc `[]`[Idx, T](a: var array[Idx, T]; i: BackwardsIndex): var T [0] proc `[]`[T, U: Ordinal](s: string; x: HSlice[T, U]): string [0] proc `[]`[T; U, V: Ordinal](s: openArray[T]; x: HSlice[U, V]): seq[T] [0] proc `[]`[T](s: openArray[T]; i: BackwardsIndex): T [0] proc `[]`[T](s: var openArray[T]; i: BackwardsIndex): var T [0] template `[]`(s: string; i: int): char