我是这种语言的新手,但我不明白后记中的这个指示是什么意思。
我对波兰表示法非常熟悉,但这个指令对我来说仍然没有意义。
/doStartGroupFile where { pop doStartGroupFile } if
有人可以帮助我吗? 提前谢谢。
答案 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'的定义,如果找到它执行它的话,否则它什么都不做。
简单: - )