Имеет ли язык Nim более короткие обозначения для инициализации объекта?

#nim-lang

#nim-lang

Вопрос:

Пример из документов

 type
  BinaryTree*[T] = ref object # BinaryTree is a generic type with
                              # generic param ``T``
    le, ri: BinaryTree[T]     # left and right subtrees; may be nil
    data: T                   # the data stored in a node

proc newNode*[T](data: T): BinaryTree[T] =
  # constructor for a node
  new(result)
  result.data = data
  

Возможно ли использовать что-то вроде однострочного ярлыка, например

 proc newNode*[T](data: T): BinaryTree[T] = 
  data.new(data = data)
  

Ответ №1:

В руководстве говорится: «Обратите внимание, что ссылочные типы данных будут равны нулю в начале процедуры и, следовательно, может потребоваться инициализация вручную» и здесь «Для выделения нового отслеживаемого объекта должна использоваться встроенная процедура new». Но если вам действительно нужно сохранить эту строку, вы можете создать шаблон:

 template aNewNode(data: untyped): void =
  new(result)
  result.data = data

proc newNode*[T](data: T): BinaryTree[T] =
  # constructor for a node
  aNewNode data