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).

Примеры

Пример 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)

Параметры

T

Область MuPAD

object1, object2, …

Произвольные объекты MuPAD

Возвращаемые значения

Элемент доменного T.

Смотрите также

Области MuPAD

Функции MuPAD