我在Linux下使用Ghostscript,仍然觉得自己像个新手。我想将值保存在堆栈顶部,以便我可以在以后调用该值而无需执行复杂的堆栈操作来检索它。该值将是从数据文件中读取的纬度,因此我无法直接将其合并到程序中。在我看来,显而易见的解决方案是将值存储为用户指令中的键/值对,类似于(保存纬度值):
2 dict coords
coords lat [some code to get the value of the latitude on the stack] put
有人可以解释一下如何进行括号括起来吗?很可能我错了,在这种情况下,请问我该怎么办?
背景:我正在编写一个程序来绘制可以使用文件中的纬度和经度数据绘制并粘贴到球上以制作世界地球仪的球体。需要相当多的数学来缩放经度才能使它们正确; y在gores中。我使用的数据是gnuplot安装中包含的world.dat
中的1320坐标集。
答案 0 :(得分:2)
你还没有给予足够的继续,'coords'和'lat'是什么?
你在操作数堆栈上创建了一个2条目字典,'coords'是一个可执行程序,它填充了吗?如果是这样,它会返回操作数堆栈上的字典吗?
通过以你拥有的方式执行'put',你将在当前字典中定义一个数组,其中包含'lat'键,无论对象类型是什么。然后,您需要再次访问'lat'才能从字典中检索对象(或者在字典上使用forall,并且仍然很难检索特定值)。
要回答你的问题,这将定义当前字典中操作数堆栈顶部的值:
5 %% put an object on top of the dictionary stack, stack is now: 5
/Saved %% create a name object on the operand stack, stack is now: 5 /Saved
exch %% exchange the objects, stack is now: /Saved 5
def %% define the value on the stack in the current dictionary, using the
%% key also on the stack
请注意,这是在当前字典中,这是字典堆栈顶部的字典。要在userdict中明确定义它,请执行
5 %% put an object on the operand stack, stack is now: 5
/Saved %% put a name object on the operand stack, stack is now: 5 /Saved
exch %% exchange the objects, stack is now: /Saved 5
userdict %% put a pointer to userdict on the operand stack, stack is now /Saved 5 <<userdict>>
3 1 roll %% roll the stack, stack is now: <<userdict>> /Saved 5
put %% put the value from the operand stack, using the key from the operand stack, in the dictionary also on the operand stack