TclOO : 导出/导入类

TclOO : Export/Import Class

提问人:Mkn 提问时间:11/7/2023 更新时间:11/7/2023 访问量:49

问:

有没有办法导出我的类,就像我们可以对命令所做的那样?
我的目的是能够在没有命名空间的情况下使用我的类的名称。
namespace export/import

namespace eval ns {}
oo::class create ns::myCLass {...}

proc ns::myfunc {} {
    set c [myCLass new] ; It works
    return $c
}

# it doesn't work, outside my namespace 
set c [myCLass new]
TCL集团

评论

2赞 Colin Macleod 11/7/2023
正如@Shawn所说,您执行与命令相同的操作,因为 TclOO 类是一种特殊类型的命令。
1赞 Donal Fellows 11/7/2023
TclOO 对象(类是对象)是命令和命名空间的混合体。该命令实际上只是一个常规命令;命令的任何规则都适用于该命令。命名空间只是一个常规命名空间(尽管它在内部是专门配置的)。有时它们具有相同的名称,但这并不能保证,因为命令可以是 d。rename

答:

2赞 Shawn 11/7/2023 #1

可以使用命名空间中的命名空间导出来标记为可导出的名称,然后在要将其与非限定名称一起使用的命名空间中使用命名空间导入myCLass

namespace eval ns {
    # Can be used with names that haven't been defined yet
    namespace export myCLass
}

oo::class create ns::myCLass {}

namespace import ns::myCLass
set c [myCLass new]

评论

0赞 Mkn 11/7/2023
我真的不认为我可以使用这个命令来导出类,谢谢。