#initialization #fortran #scope #fortran90
#инициализация #fortran #область видимости #fortran90
Вопрос:
Я хотел бы создать переменную в модуле из величин, которые я импортировал из другого. Все функции в этом модуле будут использовать новую переменную, поэтому я бы предпочел не объявлять и назначать ее заново в каждой функции. Я бы хотел объявить и назначить его один раз в начале и сделать глобальным для всего модуля. Но это не работает:
module example_mod
use some_constants, only:derp, blah
implicit none
real, private :: derived_const = derp*(blah-1.0)/50.0 !doesn't work!
contains
!a whole bunch of functions that use derived_const
Как я могу получить то, что я хочу?
Комментарии:
1. Какую фактическую ошибку вы получаете? Вы указываете
derp
иblah
значения при их объявлении?2. @Yossarian- ошибка, которую я получаю, заключается в том, что «Параметр ‘derp’ в (1) не был объявлен или является переменной, которая не сводится к постоянному выражению», и да, всему в
some_constants
модуле присваивается значение при объявлении.
Ответ №1:
Компилятор сообщает вам, что «derp» должен быть константой. Вы можете сделать это, добавив в его объявление спецификатор parameter
. Это также безопаснее для постоянных переменных, поскольку это предотвратит случайное изменение программистом их.
Комментарии:
1. Вместо этого, возможно ли объявить переменные и присвоить им значение позже, но вне какой-либо из функций в модуле? Модуль с константами в нем не мой, поэтому я не могу его редактировать.
2. Вы можете объявить
derived_const
, как вы делаете сейчас, и просто присвоить ее значение в подпрограмме. Предполагая, что вы сначала вызываете эту подпрограмму, все процедуры в вашем модуле все равно смогут ее использовать. Однако вы не сможете использовать ее ни в каких строках объявления.