Objective-C ParseKit возвращаемое значение

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

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

Спасибо

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам