Единственное отличие состоит в том, что метод new
в классах генерирует для вас уникальное имя, а с помощью метода create
вы можете указать, какое это имя. Оба предоставляются, потому что есть варианты использования для каждого из них. Используйте то, что имеет смысл для вас. (Обратите внимание, что сами объекты классов всегда называются из-за того, как они обычно используются, и поэтому вы не можете обычно создавать классы с new
; это скрыто в oo::class
экземплярах.)
Ради для полноты, есть еще один способ создания экземпляров, createWithNamespace
, который позволяет вам также указать имя пространства имен состояния объекта. Он не выставлен по умолчанию (вы должны export
вручную его использовать для общего пользования) и довольно хорош для людей, которые не занимаются глубокими махинациями. Вы, вероятно, не хотите его использовать.
В какой-то момент в будущем new
может быть улучшен, так что он также включает сборку мусора для объекта, тогда как create
не будет (потому что вы знаете, что имя вне группы). В частности, я написал TIP для этого для Tcl 9.0, но у меня пока нет работающей реализации, поэтому не задерживайте дыхание.