Инициализация переменной из вещей, включенных через use / only

#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 , как вы делаете сейчас, и просто присвоить ее значение в подпрограмме. Предполагая, что вы сначала вызываете эту подпрограмму, все процедуры в вашем модуле все равно смогут ее использовать. Однако вы не сможете использовать ее ни в каких строках объявления.