附言中的这条指令是什么意思?

What does mean this instruction in postscript?

我是这门语言的新手,但我不明白后记中的这条指令是什么意思。
我很熟悉波兰语表示法,但这条指令对我来说仍然没有意义。

/doStartGroupFile where { pop doStartGroupFile } if

有人可以帮助我吗?
提前致谢。

不难。 where 运算符在 PostScript 语言参考手册的第 718 页上进行了描述。它采用单个参数,堆栈中的 'key' 并在字典堆栈中搜索所有当前字典(从最顶层或当前字典开始)以查找包含该键的字典。

如果找到包含该键的字典,它会将对字典的引用压入操作数堆栈,然后将布尔值 'true' 压入操作数堆栈。

如果找不到包含键的字典,它会在操作数堆栈上压入一个布尔值 'false'。

因此 /doStartGroupFile where 查找包含键 '/doStartGroupFile' 的字典是否存在

下一个元素(从“{”到“}”)是一个可执行数组,因此我们只需将其打包并放入操作数堆栈。

因此,根据 'where 运算符的结果,操作数堆栈将包含:

{} true -dict-

或:

{} false

接下来是 if 运算符,您可以在 PLRM 的第 607 页找到它的定义。 if 运算符使用操作数堆栈中的两个操作数,一个过程和一个布尔值。

如果布尔值为真,则执行程序,如果为假,则简单地丢弃它。

因此,如果找到 'doStartGroupFile',我们将执行该过程,否则,我们将丢弃它。假设在我们执行该过程时找到了操作数堆栈,将只包含对我们找到 doStartGroupFile 的字典的引用。

该过程声明为 {pop doStartGroupFile},它首先从操作数堆栈中删除顶部元素(因此它丢弃对字典的引用),然后解析 doStartGroupFile。不知道 doStartGroupFile 是什么,但我猜它是在其他地方定义的可执行过程。

所以总而言之,代码片段搜索 'doStartGroupFile' 的定义,如果找到它就执行它,否则什么也不做。

简单 :-)