从Tcl到Itcl的转换
我对ITCL很陌生,有人能帮我把下面的代码从Tcl转换成ITCL吗从Tcl到Itcl的转换,tcl,itcl,Tcl,Itcl,我对ITCL很陌生,有人能帮我把下面的代码从Tcl转换成ITCL吗 catch { namespace delete ::HVToolSet } namespace eval ::HVToolSet { } { } proc ::HVToolSet::Main {} { if {[winfo exists .main]} { destroy .main } set ::HVToolSet::base [toplevel .main] varia
catch { namespace delete ::HVToolSet }
namespace eval ::HVToolSet { } {
}
proc ::HVToolSet::Main {} {
if {[winfo exists .main]} {
destroy .main
}
set ::HVToolSet::base [toplevel .main]
variable tab_frame
set x 200
set y 200
wm geometry $::HVToolSet::base ${x}x${y}+100+0
wm title $::HVToolSet::base "Chevron's Build Effective Stress Results Tool"
wm focusmodel $::HVToolSet::base passive
set creatFrame [frame .main.mnFrame]
pack $creatFrame -side top -anchor nw -expand 1 -fill both -padx 7 -pady 7
button $creatFrame.okbutton -text "OK" -command ::HVToolSet::okcall
pack $creatFrame.okbutton -side top
}
proc ::HVToolSet::okcall {} {
::HVToolSet::checkRun "right"
}
proc ::HVToolSet::checkRun {val} {
set abc 10
::newspace::exec $abc # another name space method calling
}
::HVToolSet::Main
首先,映射并不精确。你正在从一个没有类的系统转移到一个有类的系统,这是一个基本的微妙的区别 然而,粗略地说,过程变成了方法,命名空间变成了类。这至少是做什么的第一个近似值:
package require Itcl
itcl::class HVToolSet {
# Shared over all instances (and unused otherwise?!)
common variable tab_frame ""
# Specific to each instance of this class
private variable base ""
# 'Main' seemed to be a constructor of some sort
constructor {{win .main}} {
if {[winfo exists $win]} {
destroy $win
}
set base [toplevel $win]
set x 200
set y 200
wm geometry $base ${x}x${y}+100+0
wm title $base "Chevron's Build Effective Stress Results Tool"
wm focusmodel $base passive
set creatFrame [frame $base.mnFrame]
pack $creatFrame -side top -anchor nw -expand 1 -fill both -padx 7 -pady 7
button $creatFrame.okbutton -text "OK" -command [itcl::code okcall]
pack $creatFrame.okbutton -side top
}
# Obvious destructor...
destructor {
destroy $base
}
# Callback, best done as private method
private method okcall {} {
$this checkRun "right"
}
# Public method...
method checkRun {val} {
set abc 10
::newspace::exec $abc ; # another name space method calling
}
}
# Make an instance of the class that operates with the window .main
HVToolSet myInstance .main
弄清楚什么是构造函数,什么是私有方法,什么是公共方法需要一些思考。一般来说,构造函数创建并初始化对象,私有方法只在类内有意义(例如,处理回调或重构复杂的对象),而公共方法在外部调用时可能意味着什么。我一直认为[incr Tcl]是Tcl的扩展。我建议在开始时添加一个
包require Itcl
。如果过程来自其他名称空间,那么过程如何表示过程调用?