Функция TranslateModel Dymola с именем модели и модификаторами для аргумента проблемы

Почему Dymola сообщает, что переменная x0 необъявлена ​​при вызове translateModel(problem = "Sandbox.Test(x_start=x0)")? Обратите внимание, что translateModel — это встроенная внутренняя функция Dymola, позволяющая инициировать перевод модели из командной строки. Входными данными для функции является класс в виде строкового ввода.

В моем примере, демонстрирующем мой вопрос, модель Test определяется следующим образом:

model Test
  parameter Real x0=1.234;
  parameter Real x_start=-1.234;
  Real x(start=x_start, fixed=true);

equation 
  der(x) = time;

end Test;

Как и ожидалось, я могу расширить test и применить тот же модификатор, что и в следующей модели:

model Tester
  extends Test(x_start=x0);
end Tester;

В случае модели Tester вызов translateModel(problem = "Sandbox.Tester") завершается без ошибок.

Кажется, это похоже на вопрос, заданный в этом посте , но это не совсем то же самое.

Так может ли кто-нибудь объяснить, почему вызов translateModel(problem = "Sandbox.Test(x_start=x0)") не работает? Должны ли модификаторы в этой строке быть буквальными значениями? Или есть другой способ сделать этот вызов с помощью модификатора?

Я протестировал код для Test и Tester в OpenModelica и работает, как вы говорите, то есть в Tester строка кода «расширяет Test(x_start=x0)», здесь x0 относится к объявлению x0 внутри Test. Если у вас есть другое объявление x0, скажем, перед строкой кода «extends Test(...)», вы получите ошибку компиляции. Было бы полезно, если бы вы добавили код для простой версии «translateModel()», чтобы я хотя бы лучше все это понял.

janpeter 21.08.2024 07:47

Функция translateModel — это функция Dymola для выполнения перевода модели из командной строки (командная строка Dymola). Я должен был уточнить это в своем исходном сообщении. Я отредактирую это, чтобы было понятно.

Jesse Gohl 21.08.2024 17:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Модификаторы в этом аргументе для translateModel обрабатываются аналогично

model Tester=Test(x_start=x0);

вместо того, чтобы как

model Tester
  extends Test(x_start=x0);
end Tester;

Таким образом, даже если вы не ограничены строго литералами, вы не можете использовать в модификаторе какие-либо локальные переменные из модели.

Однако я не уверен, зачем вам это нужно — если бы вы включили более реалистичный пример, возможно, было бы проще предложить другое решение.

Отлично, спасибо, Ганс, это ответ на мой вопрос. Я не думал об этом с точки зрения краткого определения класса или о том, что translateModel обрабатывает модификаторы аналогичным образом. Конкретный случай возник как часть некоторой инфраструктуры внутреннего тестирования, где строка, подобная этому примеру, вызывала сбой перевода для конкретного тестового примера. Я не мог объяснить, почему это не удалось, и поэтому искал ответ здесь.

Jesse Gohl 21.08.2024 17:00

@JesseGohl, если это отвечает на ваш вопрос, пожалуйста, рассмотрите возможность «принятия» и его.

Hans Olsson 22.08.2024 16:30

Другие вопросы по теме