2017-01-12 4 views
1

私はこの言語を使い慣れていませんが、ポストスクリプトでこの命令が何を意味するのか分かりません。
私はポーランド語記法にはよく慣れていますが、この指示は私には意味がありません。この命令はポストスクリプトではどういう意味ですか?

/doStartGroupFile where { pop doStartGroupFile } if

誰かが私を助けることができますか?
ありがとうございます。

答えて

6

あまりにも難しくありません。 where演算子については、PostScript Language Reference Manualの718ページに記述されています。これは、スタックから一つのパラメータである「キー」を取り出し、そのキーを含むディクショナリのディクショナリスタック上のすべての現在のディクショナリ(最上位または現在のディクショナリで始まる)を検索します。

そのキーを含む辞書を見つけたら、オペランドスタックの辞書への参照をプッシュし、オペランドスタックにブール値「true」をプッシュします。

キーを含む辞書が見つからない場合は、オペランドスタックにブール値「false」をプッシュします。

ので/doStartGroupFile whereがキーを含む辞書の存在を探します(「{」と「}」から「)/ doStartGroupFile」

次の要素が実行可能な配列であるので、我々はちょうどそれを束ねると置きますそれはオペランドスタック上にあります。

したがって、「ここでオペレータの結果に応じて、オペランドスタックは、いずれかが含まれます。

{}真 -dict-

または:

{ }偽

次へpはif演算子です。これはPLRMの607ページで定義されています。 if演算子は、オペランドスタックから2つのオペランド、つまり手続きとブール値を消費します。

ブール値がtrueの場合はプロシージャを実行し、falseの場合は単にその値を破棄します。

したがって、 'doStartGroupFile'が見つかった場合は手順を実行し、そうでない場合は破棄します。プロシージャを実行している間にオペランドスタックが見つかったと仮定すると、単にdoStartGroupFileが見つかった辞書への参照が含まれます。

このプロシージャは{pop doStartGroupFile}と宣言されています。このプロシージャは、最初にオペランドスタックから先頭の要素を削除します(したがって、辞書への参照を破棄します)。次にdoStartGroupFileを解決します。 DoStartGroupFileが何であるか分かりませんが、他の場所で定義されている実行可能プロシージャを推測します。

要約すると、コードフラグメントは 'doStartGroupFile'の定義を検索します。見つかった場合、それ以外は何もしません。

シンプル:-)

+0

ありがとうございますKens! –

関連する問題