我听说有人将动态修补描述为一种黑客行为,或者在 Pd 的未来版本中存在破坏的风险。这是足够合理的,但这似乎意味着在构建抽象时还有其他选择。
动态修补似乎对于实例化可变数量的对象和连接到可变数量的入口和出口(在创建时定义的数字 - 我个人不需要在事后更改)入口和出口都很有用在抽象中。
现在我明白了【克隆】对象可以解决创建对象的问题。我也可以看到,循环发送和接收对象可以通过仔细规划解决许多连接问题,但我不明白的是对象如何[trigger]
, [route]
and [select]
可以通过某种方式调整或替换吗?我不明白如何避免使用动态修补,例如,当抽象的创建参数为 2 时创建 [trigger f f],当创建参数为 3 时创建 [trigger f f f]。同样,与[route]
and [select]
和类似的物体。
编辑:最初的问题被认为过于模糊。我后来在评论中提出了一个后续问题,实际上应该在这里。在我看来,后续的答案为最初的问题提供了一个很好的答案。因此,总结并希望澄清一下,我在构建抽象时需要一些“工具”,以便在可能的情况下限制动态修补的使用。这些工具结果是:
- 使用发送和接收而不是入口和出口(尽管
[initbang]
可用于在实例化时创建入口和出口)。
- using
[clone]
- 使用发送和接收链接触发器、路由和选择对象 - 例如,使用
[t b b]
- [t b b]
代替[t b b b]
。这意味着这些对象中的参数数量可以在创建时定义[clone]
例如。 Pd 邮件列表对此进行了讨论。
- using
[initbang]
正如下面的答案所示。
在尝试用我有限的动态修补技术知识构建一个带有预设和任意数量轨道的鼓机后,我意识到一定有很多方法可以避免我在这样做时遇到的问题,其中有好几种!当然,有些事情必须通过动态修补来完成,这很好。这只是关于创建可管理的代码。
这实际上是对评论中“后续问题”的回答,而不是原始问题(我认为这个问题太宽泛而无法回答),
有没有一种方法可以定义一个抽象,它有一个参数来定义该抽象公开了多少个出口?
当然可以,只需使用$1
为了那个原因。
E.g. [gates 10]
可以创建10个网点...
据推测它可以动态地修补自己,但这似乎不是一个好主意。
好吧,如果您希望抽象具有动态 API(即:可变数量的入口/出口),那么有no绕过动态修补的方法。
这是构建自己的外部的好例子吗?
取决于您实际希望外部做什么。
the iemguts https://git.iem.at/pd/iemguts库(免责声明:我是该库的作者)拥有一切功能,可以让您动态修补所需的内容。
最重要的是,有[initbang]
,在 Pd 尝试连接它们之前创建 iolet(如果您使用[loadbang]
,iolet 将在 Pd 连接失败后创建)。
它还包括一个[canvasargs]
对象,它允许您获取抽象的所有参数(例如,它简化了使出口数量等于参数数量的任务 - 就像[trigger]
or [pack]
)
相反,如果您想将抽象的整个功能包装到外部,这当然也是可能的(并且在 C 领域非常简单)。
还要记住,其他人可能已经编码了您需要的内容。
1 请不要滥用comment
后续问题字段。更新您的原始问题(如果后续只是对原始问题的澄清)或发布新问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)