从TCL8.4迁移到8.5,Im在文件源方面面临问题
我的应用程序在RHEL 5(TCL 8.4)上运行良好。但在RHEL 7 64位TCL8.5中,数据库文件的来源不正确。默认情况下,应用程序指向数据库中的最后一个记录文件。因此,我认为这可能是8.5处理文件源的方式的问题。因此,我创建了一个文件X并编写了以下代码。(请忽略dbname和/path,它可以正常工作) 文件X从TCL8.4迁移到8.5,Im在文件源方面面临问题,tcl,Tcl,我的应用程序在RHEL 5(TCL 8.4)上运行良好。但在RHEL 7 64位TCL8.5中,数据库文件的来源不正确。默认情况下,应用程序指向数据库中的最后一个记录文件。因此,我认为这可能是8.5处理文件源的方式的问题。因此,我创建了一个文件X并编写了以下代码。(请忽略dbname和/path,它可以正常工作) 文件X #!/bin/sh # \ exec tclsh "$0" "$@" puts [package require Itcl] namespace import ::itcl::
#!/bin/sh
# \
exec tclsh "$0" "$@"
puts [package require Itcl]
namespace import ::itcl::*
puts $itcl::patchLevel
puts $itcl::library
set databases /dbname
set system ($databases,dbpath) /path
source File.class.tcl
source FareFile.class.tcl
puts [Fare.File formtitle]
source Record1File.class.tcl
puts [Fare.File formtitle]
我使用File.class.tcl中声明的formtitle方法在中获取票价文件并打印表单标题(o/p:Fare Viewer)。然后我找到Record1File并打印FareFile formtitle(第一个),它打印Record1File的表单标题。formtitle方法正在返回最新源文件的值。这在8.4中不会发生
File.class.tcl:
class File {
variable fileinfo
variable recordarray
variable allads_flag 0
variable updates_is_lastkey 0
method formtitle {} {
variable fileinfo
return $fileinfo(formtitle)
}
}
FareFile.class.tcl
FareFile ::Fare.File
::Fare.File parse_fields {
tabtitle "Fares"
formtitle "Fare Viewer"
}
Record1File ::Record1.File
::Record1.File parse_fields {
tabtitle "Record 1"
formtitle "Record 1 Viewer"
Record1File.class.tcl
FareFile ::Fare.File
::Fare.File parse_fields {
tabtitle "Fares"
formtitle "Fare Viewer"
}
Record1File ::Record1.File
::Record1.File parse_fields {
tabtitle "Record 1"
formtitle "Record 1 Viewer"
8.4/RHEL 5中的输出:(8.5中的预期输出)
8.5/RHEL 7中的输出:
3.4
3.4.3
/path
Fare Viewer
Record 1 Viewer
如果您在两个平台上都看到了输出,那么它就不同了。请提供帮助(考虑到问题的所有空白,这只是一个初步答案,但我需要格式化功能:)
请通过重写方法formtitle
的正文脚本,尝试以下操作:
class File {
method formtitle {} {
set v variable
$v fileinfo
return $fileinfo(formtitle)
}
}
。。。并通过发布评论进行报告。欢迎!你能告诉我们什么是
[Fare.File formtitle]
吗?它是如何实现的?(我猜,它的实现在FareFile.class.tcl
中)?请。还可以改进问题的格式。例如,确保代码清单和预期的输出清单明确分开,以避免混淆。输出打印输出的格式也应与描述文本行不同。此行应导致语法错误:set system($databases,dbpath)/path
——太多arguments@mrcalvin谢谢你,很抱歉提出这个问题。我已经编辑了这篇文章。请检查并提出建议。谢谢:)恐怕您的脚本仍然不正确:请参阅glenn的评论,Record1File.class.tcl打印输出遗漏了一个右括号。旁白:我不知道所有文件子类是如何关联的,猜测:FareFile
是File
的子类吗Record1File
是File
的子类?问题是这可能是FareFile
类(或其超类之一)定义中的微妙之处它与事物的交互方式——甚至可能是它所依赖的行为实际上是某个地方修复的bug——或者可能是其他一些令人困惑的重大变化。您提供给我们的信息缺少(许多!)关键细节,可能会让我们做出决定。没有更多的信息,我们就不能提供很好的帮助。例如,parse_fields
方法的定义完全没有……该死。过去Itcl 3.4(解析器)使用的解决机制存在问题。我想他们可能会再次出现。