Пытаемся понять интерпретатор DOORS DXL: данные на месте

У меня проблема с пониманием, почему интерпретатор не принимает это:

Object co = current Object
Object o  = object(co."Absolute Number")

Ошибка: "неправильные аргументы для функции (объекта)" / "неправильно объединенные токены". Я убедился, что тип, возвращаемый co."Absolute Number", соответствует ожиданиям Object object(int absno[, Module m]), поскольку он был объявлен в соответствии с руководством DXL:

print type(co."Absolute Number")

который печатает "Целое число". Вроде все нормально, но явно не так.

Это не проблема этого конкретного атрибута. co."Object Text" должен возвращать строку, но и с этим атрибутом интерпретатор не распознает тип данных.

Добавление скобок в разных местах не помогает. Попытка явным образом преобразовать возвращаемое значение атрибута в целое число не помогает. Что помогает, так это сохранение возвращаемого значения в целочисленной переменной:

Object co = current Object
int no    = co."Absolute Number"
Object o  = object(no)

который мне не нравится, потому что он вводит неиспользуемые переменные. Также работает стандартный строковый подход: преобразовать значение атрибута в строку, а затем (обратно) в целое число:

Object o  = object(intOf(co."Absolute Number" ""))

но это довольно хаки для меня. Что я упустил из виду?


person Twonky    schedule 05.08.2015    source источник


Ответы (2)


Вы правы, компилятор DXL ведет себя немного странно с такими вещами. Лучший способ - тот, который вы упомянули:

Object co = current
Object o  = object(intOf(co."Absolute Number" ""))

Избавляя вас от создания посторонних переменных. Кроме того, примечание: вы заметили, что я пропустил Object после current, так как это не нужно.

Это также вызывает вопрос... зачем вам нужно создавать co и o, так как после того, как это выполняется, они оба являются дескрипторами одного и того же объекта. Вы можете просто сделать:

Object o = current

Надеюсь это поможет.

person Steve Valliere    schedule 05.08.2015
comment
Спасибо за подсказки! Иногда я склоняюсь к вещам более явным, чем требуется. И тривиальное использование co и o — это дань простоте: просто иметь функционирующий код в качестве примера. - person Twonky; 05.08.2015

Сообщение об ошибке появляется во время компиляции, когда co"Абсолютное число" не имеет типа, т.е. компилятор не ищет предопределенные атрибуты или их типы. Функция типа корректно разрешается в тип времени выполнения абсолютного числа. Функция создания наследует левосторонний тип, который является специальным в DXL.

person Thomas    schedule 18.06.2016