我使用了一个能够运行 TCL 的应用程序,该应用程序本身是用 C++ 编写的(简写 10)我相信我将它推向了远超出它的预期目标。大多数编程语言和好的工具也是如此。然而,这带来了一个独特的问题,一些 TCL 原生的项目不包含在其中,所以我必须找到创造性的方法来完成我想要完成的事情。- 足够的背景故事......主要缺点之一是没有标准输出或其他常规频道。我知道有一种方法可以创建一个,但我很难过。我找到了以下代码并试图使其工作,但出现错误。我想用于标准输出的文件路径是:
#FilePath of output ---> [sh_window exedir]IO_Text/stdout
oo::class create stdout {
variable var
constructor {varName} {
my eval [list upvar \#0 $varName var]
}
method initialize {ch mode} {
if {$mode ne "write"} {error "can't handle reading"}
return {finalize initialize write}
}
method watch {ch events} {
# Must be present but we ignore it because we do not
# post any events
}
method finalize {ch} {
my destroy
}
method write {ch bytes} {
append var $bytes
# Return the empty string, as we are swallowing the bytes
return ""
}
}
# Now we create an instance...
set string "The quick brown fox jumps over the lazy dog.\n"
set ch [chan create write [stdout new $string]]
--运行时出现以下错误:
chan handler "::oo::Obj12" does not support all required methods
我目前使用的解决方法如下。但我知道这太可怕了!
rename puts _puts;
proc puts {WInfo} {
set chan [open "[sh_window exedir]IO_Text/stdout" a+]
_puts $chan $WInfo; close $chan
}