new
Создайте доменный элемент
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
new(T
, object1, object2, …
)
В рамках метода доменного типа T
new(T, object1, object2, ...)
создает новый элемент доменного T
с внутренним представлением object1, object2, ...
.
new
является низкоуровневой функцией для создания элементов областей библиотеки.
Внутреннее представление доменного элемента включает ссылку на соответствующую область и произвольное число объектов MuPAD®, внутренние операнды доменного элемента.
new(T, object1, object2, ...)
создает новый элемент доменного T
, внутреннее представление которого является последовательностью операндов object1, object2, ...
и возвращает этот элемент.
new(T)
создает новый элемент доменного T
, внутреннее представление которого является пустой последовательностью операндов.
new
предназначается только для программистов, реализующих их собственные области в MuPAD. Вы никогда не должны использовать new
непосредственно, чтобы сгенерировать элементы предопределенного доменного T
; используйте соответствующего конструктора T(...)
вместо этого, по следующим причинам. Внутреннее представление предопределенных областей MuPAD может подвергаться изменениям чаще, чем интерфейс, обеспеченный конструктором. Кроме того, в отличие от new
, конструкторы обычно выполняют проверку аргументов. Таким образом использование new
непосредственно может привести к недопустимым внутренним представлениям объектов MuPAD.
Новые области могут быть созданы через newDomain
.
Можно получить доступ к операндам внутреннего представления доменного элемента через extop
, который, в отличие от op
, не может быть перегружен для области. Функциональный op
иногда перегружается для области в порядке скрыть внутреннее, техническое представление объекта и обеспечить более удобный для пользователя и интуитивный интерфейс.
Точно так же функциональный extnops
возвращает количество операндов доменного элемента во внутреннем представлении, и extsubsop
изменяет операнд во внутреннем представлении. Эти функции, в отличие от связанных функций nops
и subsop
, не могут быть перегружены для области.
Можно записать конструктору для собственного доменного T
путем обеспечения метода "new"
. Этот метод вызывается каждый раз, когда пользователь вызывает T(arg1, arg2, ...)
. Это рекомендуется, поскольку это обеспечивает более изящный и интуитивный пользовательский интерфейс, чем new
. Метод "new"
обычно выполняет некоторую проверку аргументов и преобразовывает аргументы arg1, arg2, ...
во внутреннее представление области, с помощью new
(см. Пример 1).
Мы создаем новый доменный Time
для представления, показывают время. Внутреннее представление объекта этой области имеет два операнда: час и минуты. Затем мы создаем новый доменный элемент в течение времени 12:45
:
Time := newDomain("Time"): a := new(Time, 12, 45)
Доменным типом a
является Time
, количеством операндов является 2
, и операндами является 12
и 45
:
domtype(a), extnops(a)
extop(a)
Мы теперь реализуем метод "new"
для нашего нового доменного Time
, разрешая несколько форматов ввода. Это ожидает или два целых числа, час и минуты, или только одно целое число, которое представляет минуты, или рациональное число или число с плавающей запятой, подразумевая, что неотъемлемая часть является часом, и дробная часть представляет часть часа, соответствуя минутам или никаким аргументам, представляя полночь. Кроме того, процедура проверяет, что аргументы имеют правильный тип:
Time::new := proc(HR = 0, MN = 0) local m; begin if args(0) = 2 and domtype(HR) = DOM_INT and domtype(MN) = DOM_INT then m := HR*60 + MN elif args(0) = 1 and domtype(HR) = DOM_INT then m := HR elif args(0) = 1 and domtype(HR) = DOM_RAT then m := trunc(float(HR))*60 + frac(float(HR))*60 elif args(0) = 1 and domtype(HR) = DOM_FLOAT then m := trunc(HR)*60 + frac(HR)*60 elif args(0) = 0 then m := 0 else error("wrong number or type of arguments") end_if; new(Time, trunc(m/60), trunc(m) mod 60) end_proc:
Теперь мы можем использовать этот метод, чтобы создать новые объекты доменного Time
, или путем вызова Time::new
непосредственно, или, предпочтительно, при помощи эквивалентного, но более короткого вызова Time(...)
:
Time::new(12, 45), Time(12, 45), Time(12 + 3/4)
Time(), Time(8.25), Time(1/2)
В порядке иметь более хороший вывод для объектов доменного Time
, мы также задаем метод "print"
(см. страницу справки для print
):
Time::print := proc(TM) begin expr2text(extop(TM, 1)) . ":" . stringlib::format(expr2text(extop(TM, 2)), 2, Right, "0") end_proc:
Time::new(12, 45), Time(12, 45), Time(12 + 3/4)
Time(), Time(8.25), Time(1/2)
|
Область MuPAD |
|
Произвольные объекты MuPAD |
Элемент доменного T
.