1

私はCLを始めたばかりで、Windows XP64のEmacs v24でCCL + Slimeを使用しています。次の問題が発生しています。

これらの 3 つの式を REPL に入力すると、意図した結果、"Something" というテキストを含むファイルが得られます。

(defparameter *file-out*
  (open "e:/test.txt"
      :direction :output
      :if-exists :supersede
      :if-does-not-exist :create))

(write-line "Something" *file-out*)

(close *file-out*)

しかし、同じコードがテキスト バッファーにあり、Cc Cc を使用して式を 1 つずつ評価すると、(write ...) ステートメントを評価するときに次のエラーが発生します。

Stream #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/test.txt"/2616 UTF-8) #x2180C0A06D> is private to #<PROCESS worker(46) [Reset] #x2180BB558D>
[Condition of type SIMPLE-ERROR]

原因は何ですか?ご協力いただきありがとうございます。

編集:

バックトレースでこれを見つけたので、エラーは (CCL::CHECK-IOBLOCK-OWNER ...) から発生しているようで、所有者は「PROCESS Worker(31)」です:

0: (CCL::CHECK-IOBLOCK-OWNER #S(CCL::FILE-IOBLOCK :STREAM #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/apps/gcj/2008-0-A-large-practice.out"/1600 UTF-8) #x2180AA709D> :UNTYI-CHAR NIL :INBUF ...))
    Locals:
    IOBLOCK = #S(CCL::FILE-IOBLOCK :STREAM #<BASIC-FILE-CHARACTER-OUTPUT-STREAM ("e:/apps/gcj/2008-0-A-large-practice.out"/1600 UTF-8) #x2180AA709D> :UNTYI-CHAR NIL :INBUF ...)
    OWNER = #<PROCESS worker(31) [Reset] #x2180AA2B5D>

ファイル ストリームの所有者を確認するために、次のテストを行いました。

  • REPL から file -out1file-out2の2 つの異なるファイルを開き、Cc Cc を使用してテスト バッファーからそれらに書き込もうとすると、所有者が "worker(12)" であるというエラーが表示されます。

  • Cc Cc を使用してテスト バッファーからfile-out1を開きました。テスト バッファーまたは REPL またはその他の場所からファイルに書き込もうとすると、所有者が "worker(30)" であるというエラーが表示されます。

  • Cc Cc を使用してテスト バッファーからfile-out2を開きました。テスト バッファーまたは REPL またはその他の場所からファイルに書き込もうとすると、所有者が "worker(31)" であるというエラーが表示されます。

  • Cc Ck で一度にテスト バッファ (ファイルのオープン、書き込み、およびクローズ) を実行したところ、動作しました。

結論:

REPL には変更されないワーカー プロセス ID がありますが、別のバッファー (Cc Cc または Cc Ck) から発行された評価は、毎回新しいワーカー プロセスを生成します。誰かが「ワーカープロセス」全体を説明できますか?

編集:

Linuxで再テストしたところ、Windowsと同じ動作が得られました。混乱を避けるために、Linuxに関する部分を削除しました


UIStoryboard は、セグエが実行されるたびに新しい UIViewController オブジェクトをインスタンス化しますか?

モーダル セグエを実行する 2 つの静的セルを持つ UITableViewController で Storyboards を使用して、2 つの異なる UIViewControllers を表示すると、実際には、initWithCoder: メソッド (そしてもちろん viewDidLoad) を呼び出すたびに、これらのビュー コントローラーの新しいインスタンスが作成されることに気付きました。私は常に同じインスタンスが使用され、initWithCoder: がビュー コントローラー クラスごとに 1 回だけ呼び出されると考えていました。

誰かがこの動作が正しいことを確認できますか? 私は空想的なものは何も使用していません。prepareForSegue も使用していません。

これを回避する方法はありますか?

4

1 に答える 1