Я полагаю, что есть три канонических способа работы с гибкими аргументами:
- что угодно:
f[x_]
, - несколько форм:
f[{x : p ..}]
и f[x:p]
,где один вызывает другой, и - чередование:
f[{x : p ..} | x : p]
.
Основное отличие состоит в том, где вы имеете дело с дополнительной сложностью гибких аргументов.У каждого могут быть свои преимущества.
Основным преимуществом чего бы то ни было, является простота создания приемлемых шаблонов, но это оставляет обработку внутренним частям функции, что увеличивает ее сложность.См. ErrorBarPlots .m
файл для хорошего примера этого.В конечном счете, однако, ErrorListPlot
опирается на второй метод, скрытый за фасадом первого метода.
Метод нескольких форм увеличивает сложность работы диспетчера при выборе правильной альтернативы.Он имеет простейшую функциональную форму, поскольку одна форма обычно вызывает другую форму с «правильным» расположением данных.Сложность этого метода заключается в экспоненциальном росте спецификаций функций с количеством параметров с альтернативами.Это может быть ограничено путем применения гибридного подхода, подобного тому, который описан в ErrorListPlot
.
Чередование имеет наиболее сложную форму шаблона и может потребовать специальной обработки для извлечения альтернатив, аналогичных чему-либо.Кроме того, сами шаблоны могут быть сложнее построить, и из-за возможности дополнительной обработки этот метод следует использовать реже всего из трех.Однако в некоторых случаях, как в вашем коде, этот метод может быть наиболее простой реализацией.