gpt4 book ai didi

file-io - 在命名空间内的 proc 中的 return 语句之后打开文件?

转载 作者:行者123 更新时间:2023-12-04 17:01:39 26 4
gpt4 key购买 nike

我无法打开文件并从命名空间内的过程内部写入文件。只是想知道 TCL 是否允许这样做。

namespace eval ::ms {}
proc ::ms::add {a b} {
return [expr {$a + $b}]
set fp [open "dummy.txt" w+]
puts $fp "test\ntest1\ntest2"
close $fp
}
puts [::ms::add 10 20]

我希望在执行这段代码后,我的当前目录中会出现一个名为 dummy.txt 的文件。

最佳答案

当过程执行 return (没有您未提供的选项),它会立即停止执行过程。过程中随后出现的代码根本不会执行。要制作文件,请在 return 之前移动创建它的命令并将内容写入其中。 .

proc ::ms::add {a b} {
set fp [open "dummy.txt" w+]
puts $fp "test\ntest1\ntest2"
close $fp

# You should also brace your expressions always
return [expr {$a + $b}]
}

然而,有一种方法可以让 return 之后的文件写入代码.返回是通过抛出一种异常(通常由过程的外壳捕获,这是准备和清理堆栈帧的同一位代码)在内部完成的,该异常可以被拦截。 Tcl 有两个命令可以拦截返回异常: catchtry .后者在 return 之后放置代码简单:
proc ::ms::add {a b} {
try {
return [expr {$a + $b}]
} finally {
set fp [open "dummy.txt" w+]
puts $fp "test\ntest1\ntest2"
close $fp
}
}

你可以用 catch 做同样的事情(这更像是一种原始操作)但它很繁琐,并不真正推荐。

关于file-io - 在命名空间内的 proc 中的 return 语句之后打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com