Itcl中是否有可能使用构造函数内的方法动态扩展类?
我有一些动态生成的函数......
他们看起来像这样:
proc attributeFunction fname {
set res "proc $fname args {
#set a attribute list in the class
}"
uplevel 1 $res
}
现在我有一个包含可能属性列表的文件:
attributeFunction ::func1
attributeFunction ::func2
attributeFunction ::func3
...
此文件来源。但到目前为止,我正在添加全局功能。 将这些函数作为方法添加到Itcl对象会更好。
一些背景信息:
这用于生成一种抽象语言,用户可以通过编写它们而无需任何其他关键字来轻松添加这些属性。在这里使用功能提供了许多我不想错过的优点。
答案 0 :(得分:1)
在Itcl 3中,您所能做的就是重新定义现有方法(使用itcl::body
命令)。您无法在构造函数中创建新方法。
你可以在Itcl 4中执行此操作,因为它建立在TclOO(一个完全动态的OO核心)的基础之上。您需要基础TclOO工具来执行此操作,但您调用的命令是这样的:
::oo::objdefine [self] method myMethodName {someargument} {
puts "in the method we can do what we want..."
}
这是一个更完整的例子:
% package require itcl
4.0.2
% itcl::class Foo {
constructor {} {
::oo::objdefine [self] method myMethodName {someargument} {
puts "in the method we can do what we want..."
}
}
}
% Foo abc
abc
% abc myMethodName x
in the method we can do what we want...
看起来对我有用......