【问题标题】:Objective-C ParseKit return valueObjective-C ParseKit 返回值
【发布时间】:2011-08-17 18:37:38
【问题描述】:
在 flex/lex/bison/yacc(我刚刚开始阅读所有这些内容)中,您可以将“$$”设置为某个值($1、$2、$3),这就是返回的值。至少我认为它是这样运作的。
在 ParseKit 中,给你一个堆栈,所以我想 ($1,$2,$3) 将是堆栈上的前三个值。但是我认为您想要做的是将这些值从堆栈中弹出并将您的返回值放在堆栈中。我看到堆栈带有推送方法。是否必须先弹出传入的值才能推送某些内容?
谢谢
【问题讨论】:
标签:
objective-c
bison
yacc
lex
parsekit
【解决方案1】:
这里是 ParseKit 的开发者。我会说:这取决于。一些想法:
是的,通过在发送到解析器委托回调的程序集上调用 -[PKAssembly push:] 将对象/值存储在程序集的堆栈中通常很有用/可取。稍后的回调将在程序集的堆栈中找到这些值,并且可能希望在找到它们时采取行动。
另一种选择:如果您的回调方法正在构建一些结果对象,您通常希望将其存储为传递给您的回调方法的程序集的-[PKAssembly target] 属性。因此,您有两个地方可以存储值:程序集的目标或程序集的堆栈。目标是这样做的“正确”位置,但通常堆栈也很方便。两者都可以,但我会说:将临时值存储在堆栈上,但将您正在构建的最终对象存储为目标。但同样,你可以做任何一个。
是的,您的回调通常应该首先从堆栈中弹出值,但这不是必需的。如果这样想:您的委托回调方法接收PKAssembly 对象作为参数。通常你的回调方法会检查程序集的堆栈并根据它在那里找到的内容采取行动。通常,在你的回调中,如果你对它们采取行动,你会想要弹出在那里找到的值。基本上:你的回调应该弹出它感兴趣/采取行动的值,因为在某种意义上你的回调是这些项目/信息的预期接收者。