后记中的这个指令是什么意思?

时间:2017-01-12 09:14:53

标签: postscript

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

/doStartGroupFile where { pop doStartGroupFile } if

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

1 个答案:

答案 0 :(得分:6)

它不太难。 PostScript语言参考手册的第718页介绍了where运算符。它需要一个参数,即“键”。离开堆栈并搜索字典堆栈上的所有当前字典(从最顶层或当前字典开始),查找包含该密钥的字典。

如果它找到一个包含该键的字典,它会在操作数堆栈上推送对字典的引用,然后按下一个布尔值' true'在操作数堆栈上。

如果它没有找到包含该键的字典,则会推送一个布尔值“false”'在操作数堆栈上。

所以/doStartGroupFile where寻找包含密钥' / doStartGroupFile'

的字典的存在

下一个元素(来自' {'到'}')是一个可执行数组,因此我们将其捆绑并将其放在操作数堆栈上。

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

  

{}是的   -dict -

或者:

  

{} false

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

如果布尔值为true,则执行该过程,如果为false,则只丢弃它。

所以,如果' doStartGroupFile'我们发现我们执行了这个程序,如果不是,我们会丢弃它。假设在我们执行过程时发现操作数堆栈将只包含对我们找到doStartGroupFile的字典的引用。

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

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

简单: - )