ITCL - Как получить доступ к члену ассоциативного массива внутри класса? - PullRequest
2 голосов
/ 29 октября 2009

Как получить доступ к члену ассоциативного массива класса внутри самого класса? Itcl смоделирован после C ++, а в C ++ мы написали бы:

SomeObject.SomePublicMember = ...

Как сделать то же самое в Itcl? Без предоставления процедуры доступа для такого массива. Я видел, что для обычных простых переменных это можно получить с помощью cget:

$this cget -PublicMemberVariableName

Однако следующая конструкция не работает:

$this cget -AssociativeArrayName(NamedIndex)

Возможно ли это вообще?

1 Ответ

2 голосов
/ 30 октября 2009

Увы, cget не получит то, что вы хотите. Элемент массива не передается полностью до ItclGetInstanceVar (я не уверен почему).

Вы можете использовать get / set и т.п.:

class myObject {
   public variable AssArray
   constructor {} {
      array set AssArray ""
   }
   method setArr { elem val } {
      set AssArray($elem) $val
   }
   method getArr { elem } {
      return $AssArray($elem)
   }
   method getFullArr {} {
      return [array names AssArray]
}
...