首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在itcl中调用保护方法

在itcl中调用保护方法
EN

Stack Overflow用户
提问于 2014-03-04 06:26:49
回答 2查看 649关注 0票数 1

我在学习tcl。我正在创建一个类并编写一个受保护的方法。我试图使用object调用受保护的方法,但是我得到了错误。

下面是tcl中的代码

代码语言:javascript
复制
::itcl::class p5 {
    protected variable pec "5"

    #constructor {} {
    #   set pec 10
    #}
    protected method abc {} {puts " value of pec is $pec";}
}

p5 o5
o5 abc

我的错误越来越少

代码语言:javascript
复制
bad option "abc": should be one of...
  o5 cget -option
  o5 configure ?-option? ?value -option value...?
  o5 isa className

在类中如何调用受保护的方法

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-04 10:33:28

您不能从类的实例(或子类的实例)的上下文之外调用受保护的方法;这就是被保护的全部意义所在。但是您可以使用itcl::code进入上下文,这对于生成回调非常有用。当然,您必须在上下文中使用itcl::code

代码语言:javascript
复制
::itcl::class p5 {
    protected variable pec "5"
    protected method abc {} {puts " value of pec is $pec";}

    public method getAbcCaller {} {
        return [itcl::code $this abc]
    }
}

测试一下:

代码语言:javascript
复制
% 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
票数 3
EN

Stack Overflow用户

发布于 2014-03-04 06:37:20

如果您希望能够调用方法abc,请不要将其设置为protected。从方法声明中删除关键字protected,您的程序就可以工作了。

更新

您可以在类中调用受保护的方法(即从同一类中的其他方法)。这就是保护的意思。您可以使用Donal的方法传递保护,但这违背了protected关键字的用途。

顺便说一句,Donal的帖子激励我想出另一种方法来调用受保护的方法:

代码语言:javascript
复制
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关键字,我强烈建议删除它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22164534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档