从TCL8.4迁移到8.5,Im在文件源方面面临问题

从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::

我的应用程序在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::*
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(解析器)使用的解决机制存在问题。我想他们可能会再次出现。