Objective-C ParseKit возвращаемое значение - PullRequest
1 голос
/ 17 августа 2011

В flex / lex / bison / yacc (все, о чем я только что начал читать) вы можете установить "$$" равным некоторому значению ($ 1, $ 2, $ 3), и это значение, которое будет возвращено. По крайней мере, я так думаю.

В ParseKit вам предоставляется стек, поэтому я представляю, что ($ 1, $ 2, $ 3) будут, например, первые три значения в стеке. Но потом я думаю, что вы хотели бы сделать это выгрузить эти значения из стека и поместить ваше возвращаемое значение в стек. Я вижу, что в стеке используется метод push. Нужно ли сначала выталкивать входящие значения, прежде чем что-то нажимать?

Спасибо

1 Ответ

2 голосов
/ 17 августа 2011

Разработчик ParseKit здесь. Я бы сказал: это зависит. Несколько мыслей:

  1. Да, часто полезно / желательно сохранять объекты / значения в стеке сборки, вызывая -[PKAssembly push:] в сборке, отправленной в ваши обратные вызовы делегата анализатора. Более поздние обратные вызовы найдут эти значения в стеке сборки и, возможно, захотят принять меры, когда они будут найдены.

  2. Другой вариант: если ваши методы обратного вызова строят какой-либо объект результата, вы обычно хотите сохранить его как свойство -[PKAssembly target] сборки, переданной в ваш метод обратного вызова. Таким образом, у вас есть два места, где вы можете хранить значения: цель сборки или стек сборки. Цель - это «правильное» место для этого, но часто стек также удобен. Либо хорошо, но я бы сказал: храните временные значения в стеке, но сохраняйте конечный объект, который вы строите, как цель. Но опять же, вы можете сделать либо.

  3. Да, ваши обратные вызовы часто должны сначала вытолкнуть значения из стека, но это не обязательно. Подумайте, если это так: ваш метод обратного вызова делегата получает объект PKAssembly в качестве параметра. И обычно ваш метод обратного вызова проверяет стек сборки и предпринимает действия в зависимости от того, что он там находит. Как правило, в вашем обратном вызове вы хотите получить значения, которые вы там найдете, если вы предпринимаете действия с ними. В основном: ваш обратный вызов должен извлекать значения, в которых он заинтересован / предпринимает какие-либо действия, потому что в некотором смысле ваш обратный вызов был предполагаемым получателем этих элементов / информации.

...