Какие существуют альтернативы динамическому исправлению (для работы с переменными, переданными во время создания)?

Я слышал, что люди описывают динамическое исправление как что-то вроде взлома или риска поломки в будущих выпусках Pd. Это достаточно разумно, но кажется, что существуют альтернативы при построении абстракций.

Динамическое исправление кажется полезным как для создания экземпляров переменного количества объектов, так и для подключения к переменному количеству (число, определенное во время создания - лично мне не нужно, чтобы оно менялось постфактум на данном этапе) входов и выходов внутри абстракции.

Теперь я понимаю, что объект [клон] может решить проблему создания объектов. Я также вижу, что перебор объектов отправки и получения решит большую часть проблем с подключением при тщательном планировании, но чего я не понимаю, так это того, как такие объекты, как [trigger], [route] и [select], можно каким-то образом настроить или заменить? Я не понимаю, как можно избежать использования динамического исправления, например, для создания [триггера f f], когда аргумент создания для вашей абстракции равен 2, и [триггер f f f], когда аргумент создания равен 3. Опять же, то же самое с [route] и [select] и подобные объекты.

РЕДАКТИРОВАТЬ: исходный вопрос был воспринят как слишком расплывчатый. Позже я задал дополнительный вопрос в комментариях, который действительно должен быть здесь. Как оказалось, ответ на продолжение, на мой взгляд, дал хороший ответ на первоначальный вопрос. Итак, чтобы подвести итоги и, надеюсь, прояснить, я хотел использовать несколько «инструментов» при построении абстракций, чтобы я мог ограничить использование динамических исправлений, если это возможно. Этими инструментами оказались:

  • используя отправку и получение вместо входов и выходов (хотя [initbang] можно использовать для создания входов и выходов при создании экземпляра).
  • используя [clone]
  • триггер цепочки, маршрутизация и выбор объектов с помощью отправки и получения, например, с использованием [t b b] - [t b b] вместо [t b b b]. Это означает, что количество аргументов в этих объектах может быть определено во время создания, например, с помощью [clone]. Это обсуждается в списке рассылки Pd.
  • используя [initbang], как указано в ответе ниже.

После попытки построить драм-машину с пресетами и произвольным количеством треков с моими ограниченными знаниями о методах динамического патчинга, я понял, что должно быть много способов избежать проблем, с которыми я столкнулся при этом, а их было несколько! Конечно, некоторые вещи приходится делать с помощью динамического исправления, и это нормально. Это просто создание управляемого кода.


person sinewave440hz    schedule 13.02.2018    source источник
comment
Проще говоря: есть множество вещей, которые вы можете сделать только с помощью динамического исправления. поскольку большинство ваших вариантов использования, по-видимому, сосредоточено вокруг вопроса о том, как вы можете динамически изменять патч без динамического исправления, вы, вероятно, найдете мало альтернатив. однако ваши основные проблемы вполне могут быть решены без динамического исправления (мы не знаем).   -  person umläute    schedule 17.02.2018
comment
На самом деле, большинство моих вариантов использования сосредоточены на определении патча во время его создания. В настоящее время меня не слишком беспокоит изменение соединений после этого. Я изучал это - помните, моя цель - создать абстракции, которые создают ряд объектов и соединений на основе их аргументов создания. Теперь, после этого исследования, мне кажется, что это можно решить с помощью [клонирования] и беспроводных соединений между различными клонированными объектами. Я потрачу на это некоторое время и отчитаюсь с ответом в течение недели!   -  person sinewave440hz    schedule 19.02.2018
comment
Связанный дополнительный вопрос. Есть ли способ определить абстракцию, у которой есть аргумент, определяющий, сколько точек доступа предоставляет абстракция? Предположительно, он мог бы динамически исправлять себя, но это не кажется хорошей идеей. Это хороший случай для создания собственного внешнего?   -  person sinewave440hz    schedule 21.02.2018


Ответы (1)


Это действительно ответ на «дополнительный вопрос» в комментарии¹, а не на исходный вопрос (который я считаю слишком широким, чтобы на него можно было ответить),

Есть ли способ определить абстракцию, у которой есть аргумент, определяющий, сколько выходов предоставляет абстракция?

Конечно, просто используйте для этого $1.

Например. [gates 10] может создать 10 торговых точек...

Предположительно, он мог бы динамически исправлять себя, но это не кажется хорошей идеей.

хорошо, если вы хотите, чтобы абстракция имела динамический API (то есть: переменное количество входов/выходов), тогда нет способа обойти динамическое исправление.

Это хороший случай для создания собственного внешнего?

зависит от того, что вы на самом деле хотите, чтобы внешний делал.

в библиотеке iemguts (отказ от ответственности: автором которой являюсь я) есть все необходимое, чтобы вы для динамического исправления того, что вам нужно. Самое главное, есть [initbang] для создания iolets до того, как Pd попытается их подключить (если вы используете [loadbang], iolets будут созданы после того, как Pd не сможет к ним подключиться). Он также включает объект [canvasargs], который позволяет вам получить все аргументы абстракции (например, что упрощает задачу, когда количество выходов равно количеству аргументов - например, [trigger] или [pack])

если вместо этого вы хотите обернуть всю функциональность вашей абстракции во внешний объект, это, конечно, также возможно (и довольно просто в области C). Также имейте в виду, что другие, возможно, уже закодировали то, что вам нужно.

¹ не злоупотребляйте полем comment для дополнительных вопросов. либо обновите свой исходный вопрос (если последующее действие является простым уточнением исходного вопроса), либо опубликуйте новый.

person umläute    schedule 26.02.2018
comment
Спасибо. Я обновил вопрос, вы совершенно правы. На эту тему, наверное, можно еще многое сказать, но лично у меня есть ответы, которые мне нужны на данный момент. - person sinewave440hz; 26.02.2018
comment
Стоит отметить, что теперь есть также объект [pdcontrol] начиная с Pd 0.50, который даст вам список аргументов, в некотором роде ванильная альтернатива [canvasargs]. - person Max N; 03.05.2020