可以从itcl类成员中提取保护水平吗?

时间:2013-03-04 19:34:32

标签: tcl doxygen

我正在尝试使用doxygen来记录我的itcl代码(版本1.8.2)。但是,它似乎错过了保护级别(公共/受保护/私人)。此外,它将常见变量与实例变量混为一谈,将所有变量标记为静态(只有常见变量应为静态变量)。第三,它不喜欢具有初始化状态的构造函数。通过在下面的代码上运行doxygen,所有这些行为都很明显。从doxygen手册本身的tcl代码示例中也可以看出前两个行为。这些已知的tcl扫描仪在doxygen中有局限性吗?感谢。

##\file

## MyClass
itcl::class MyClass {
    private common a     ;#< private common a
    protected common b   ;#< protected common b
    public common c      ;#< public common c
    private variable x   ;#< private variable x
    protected variable y ;#< protected variable y
    public variable z    ;#< public variable z
    ## private proc aa
    private proc aa args {}
    ## protected proc bb
    protected proc bb args {}
    ## public proc cc
    public proc cc args {}
    ## private method xx
    private method xx args {}
    ## protected method yy
    protected method yy args {}
    ## public method zz
    public method zz args {}
    ## constructor
    constructor args {} { 
        eval configure $args 
    }
}

1 个答案:

答案 0 :(得分:1)

有一种(实用的)方法可以让doxygen了解类方法和实例以及公共变量的范围。但是,生成的doc仍会将所有ivars报告为“静态”。

用于确定方法/ ivar范围的doxygen命令是:

## \private
## \protected
## \public

我从doxygen doc example推断出这一点,尽管关键字也存在doxygen命令。

doxygen和Tcl存在许多我无法克服的问题。

  • 实例变量记录为“静态”
  • 对于命令(例如\ private,\ protected)不解析简要文档(;#&lt;),如您的示例所示。我不知道这是否是预期的行为......
  • 在类中声明的procs被忽略(虽然在任何其他命名空间中声明它们,但是类'自己的工作,甚至是父命名空间)。

doxygen的bugzilla中没有关于此事的报道错误...

我重写了你的例子,并添加了更多有效和无效的例子。

##\file

## MyClass
itcl::class MyClass {

   ## \private common a
   private common a
   ## \protected common b
   protected common b 
   ## common c
   public common c

   private variable t   ;#<  variable x \private
   protected variable u ;#<  variable u \protected
   public variable v    ;#<  variable v \public

   private variable x   ;#< \private variable x 
   protected variable y ;#< \protected variable y
   public variable z    ;#< \public variable z

   ## \private proc aa
   private proc aa args {}
   ## \protected proc bb
   protected proc bb args {}

   private method xx args {} ;#< \private method xx
   protected method yy args {} ;#< \protected method yy
   public method zz args {} ;#< \public method zz


   ## \private variable k
   variable k   
   ## \protected variable l
   variable l
   ## \public variable m
   variable m   

   ## constructor
   constructor args {} { 
      eval configure $args 
   }

   ## proc proc comment
   proc cc { args } {}

}

## proc proc comment outside
proc dd { args } {}

namespace eval ::MyClass {
   ## proc proc comment outside
   proc ee { args } {}
}