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.