1

私は TCL を実行できるアプリを使用しています。アプリ自体は C++ (速記 10) で記述されています。これまでの意図をはるかに超えていると思います。ほとんどのプログラミング言語や優れたツールと同様です。ただし、これには固有の問題があり、TCL 固有のアイテムの一部がこれに含まれていないため、達成しようとしていることを行うための創造的な方法を見つける必要があります。- 裏話はもう十分です... 大きな欠点の 1 つは、stdout やその他の通常のチャネルがないことです。作成する方法があることは知っていますが、苦労しています。次のコードを見つけて動作させようとしていますが、エラーが発生しています。stdout に使用したいファイル パスは次のとおりです。

#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
} 
4

2 に答える 2

1

refchan のドキュメントwatchで説明されているように、必須のサブコマンドの実装がありません。そのため、すべてのメソッドをサポートしていないというエラーが発生します。この例は、コピーできるダミーのスタブを示しています。

于 2014-09-07T00:28:49.440 に答える