在itcl中调用受保护的方法
我正在学习tcl。我正在创建一个类并编写一个受保护的方法。我试图使用对象调用受保护的方法,但出现错误 下面是tcl中的代码在itcl中调用受保护的方法,tcl,Tcl,我正在学习tcl。我正在创建一个类并编写一个受保护的方法。我试图使用对象调用受保护的方法,但出现错误 下面是tcl中的代码 ::itcl::class p5 { protected variable pec "5" #constructor {} { # set pec 10 #} protected method abc {} {puts " value of pec is $pec";} } p5 o5 o5 abc 我正在犯错误 bad o
::itcl::class p5 {
protected variable pec "5"
#constructor {} {
# set pec 10
#}
protected method abc {} {puts " value of pec is $pec";}
}
p5 o5
o5 abc
我正在犯错误
bad option "abc": should be one of...
o5 cget -option
o5 configure ?-option? ?value -option value...?
o5 isa className
任何关于如何在类中调用受保护的方法的线索如果您希望能够调用方法
abc
,请不要将其设置为受保护的
。从方法声明中删除关键字protected
,您的程序应该可以运行
更新
您可以在类中调用受保护的方法(即从同一类中的其他方法)。这就是保护的意思。您可以使用Donal的方法绕过保护,但这违背了protected
关键字的目的
顺便说一句,Donal的帖子启发我想出了另一种调用受保护方法的方法:
package require Itcl
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
protected method greet {name1 name2} { puts "Hello $name1 and $name2" }
method callProtectedMethod {methodName args} {
eval [$methodName {*}$args]
}
}
p5 o5
o5 callProtectedMethod abc
o5 callProtectedMethod greet Harry Sally
我的方法创建了一个公共方法
callProtectedMethod
,它允许调用任何受保护的方法。同样,在执行此操作时,如果您确实需要调用protected
关键字,我强烈建议您将其删除。如果您希望能够调用方法abc
,请不要将其设置为protected
。从方法声明中删除关键字protected
,您的程序应该可以运行
更新
您可以在类中调用受保护的方法(即从同一类中的其他方法)。这就是保护的意思。您可以使用Donal的方法绕过保护,但这违背了protected
关键字的目的
顺便说一句,Donal的帖子启发我想出了另一种调用受保护方法的方法:
package require Itcl
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
protected method greet {name1 name2} { puts "Hello $name1 and $name2" }
method callProtectedMethod {methodName args} {
eval [$methodName {*}$args]
}
}
p5 o5
o5 callProtectedMethod abc
o5 callProtectedMethod greet Harry Sally
我的方法创建了一个公共方法
callProtectedMethod
,它允许调用任何受保护的方法。同样,在执行此操作时,如果您确实需要调用protected
关键字,我强烈建议您将其删除。如果您希望能够调用方法abc
,请不要将其设置为protected
。从方法声明中删除关键字protected
,您的程序应该可以运行
更新
您可以在类中调用受保护的方法(即从同一类中的其他方法)。这就是保护的意思。您可以使用Donal的方法绕过保护,但这违背了protected
关键字的目的
顺便说一句,Donal的帖子启发我想出了另一种调用受保护方法的方法:
package require Itcl
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
protected method greet {name1 name2} { puts "Hello $name1 and $name2" }
method callProtectedMethod {methodName args} {
eval [$methodName {*}$args]
}
}
p5 o5
o5 callProtectedMethod abc
o5 callProtectedMethod greet Harry Sally
我的方法创建了一个公共方法
callProtectedMethod
,它允许调用任何受保护的方法。同样,在执行此操作时,如果您确实需要调用protected
关键字,我强烈建议您将其删除。如果您希望能够调用方法abc
,请不要将其设置为protected
。从方法声明中删除关键字protected
,您的程序应该可以运行
更新
您可以在类中调用受保护的方法(即从同一类中的其他方法)。这就是保护的意思。您可以使用Donal的方法绕过保护,但这违背了protected
关键字的目的
顺便说一句,Donal的帖子启发我想出了另一种调用受保护方法的方法:
package require Itcl
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
protected method greet {name1 name2} { puts "Hello $name1 and $name2" }
method callProtectedMethod {methodName args} {
eval [$methodName {*}$args]
}
}
p5 o5
o5 callProtectedMethod abc
o5 callProtectedMethod greet Harry Sally
我的方法创建了一个公共方法
callProtectedMethod
,它允许调用任何受保护的方法。同样,在这项工作中,如果您确实需要调用protected
关键字,我强烈建议您删除它。您不能从类实例(或子类实例)的上下文之外调用受保护的方法;这就是它被保护的全部意义。但是您可以使用itcl::code
进入上下文,这对于生成回调非常有用。当然,您必须从上下文中使用itcl::code
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
public method getAbcCaller {} {
return [itcl::code $this abc]
}
}
测试它:
% p5 o5
o5
% o5 abc
bad option "abc": should be one of...
o5 cget -option
o5 configure ?-option? ?value -option value...?
o5 getAbcCaller
o5 isa className
% eval [o5 getAbcCaller]
value of pec is 5
不能从类实例(或子类实例)的上下文之外调用受保护的方法;这就是它被保护的全部意义。但是您可以使用
itcl::code
进入上下文,这对于生成回调非常有用。当然,您必须从上下文中使用itcl::code
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
public method getAbcCaller {} {
return [itcl::code $this abc]
}
}
测试它:
% p5 o5
o5
% o5 abc
bad option "abc": should be one of...
o5 cget -option
o5 configure ?-option? ?value -option value...?
o5 getAbcCaller
o5 isa className
% eval [o5 getAbcCaller]
value of pec is 5
不能从类实例(或子类实例)的上下文之外调用受保护的方法;这就是它被保护的全部意义。但是您可以使用
itcl::code
进入上下文,这对于生成回调非常有用。当然,您必须从上下文中使用itcl::code
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
public method getAbcCaller {} {
return [itcl::code $this abc]
}
}
测试它:
% p5 o5
o5
% o5 abc
bad option "abc": should be one of...
o5 cget -option
o5 configure ?-option? ?value -option value...?
o5 getAbcCaller
o5 isa className
% eval [o5 getAbcCaller]
value of pec is 5
不能从类实例(或子类实例)的上下文之外调用受保护的方法;这就是它被保护的全部意义。但是您可以使用
itcl::code
进入上下文,这对于生成回调非常有用。当然,您必须从上下文中使用itcl::code
::itcl::class p5 {
protected variable pec "5"
protected method abc {} {puts " value of pec is $pec";}
public method getAbcCaller {} {
return [itcl::code $this abc]
}
}
测试它:
% p5 o5
o5
% o5 abc
bad option "abc": should be one of...
o5 cget -option
o5 configure ?-option? ?value -option value...?
o5 getAbcCaller
o5 isa className
% eval [o5 getAbcCaller]
value of pec is 5
是的,如果我删除受保护的,它会工作。但是我如何调用受保护的方法呢。有什么办法吗?是的,如果我移除受保护的,它会起作用。但是我如何调用受保护的方法呢。有什么办法吗?是的,如果我移除受保护的,它会起作用。但是我如何调用受保护的方法呢。有什么办法吗?是的,如果我移除受保护的,它会起作用。但是我如何调用受保护的方法呢。有办法吗?