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.