与TCL合作,我想实现类似于Strategy Pattern的东西。我想在TCL函数中传入打印输出的“策略”,这样我就可以很容易地在打印到屏幕和打印到日志文件之间切换。在TCL中做这件事的最好方法是什么?
发布于 2008-10-31 19:20:12
TCL允许您将过程的名称存储在变量中,然后使用该变量调用该过程;因此
proc A { x } {
puts $x
}
set strat A
$strat Hello
将调用proc A并输出Hello
发布于 2008-11-08 06:11:55
除了显示如何将过程赋值给变量的答案之外,还可以将过程的名称作为参数传递给另一个过程。下面是一个简单的例子:
proc foo { a } {
puts "a = $a"
}
proc bar { b } {
puts "b = $b"
}
proc foobar { c } {
$c 1
}
foobar foo
foobar bar
这将打印a=1和b=1
发布于 2008-11-01 02:54:01
上面列出的一个略微扩展的示例可能会更清楚地说明Strategy模式:
proc PrintToPDF {document} {
<snip logic>
}
proc PrintToScreen {document} {
<snip logic>
}
proc PrintToPrinter {document} {
<snip logic>
}
set document "my cool formatted document here"
set printMethod "printer"
switch -- $printMethod {
"printer" {
set pMethodName "PrintToPrinter"
}
"pdf" {
set pMethodName "PrintToScreen"
}
"screen" {
set pMethodName "PrintToPDF"
}
}
$pMethodName $document
https://stackoverflow.com/questions/253426
复制相似问题