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
.