%
в качестве токена имеет ряд тесно связанных применений. По мере развития Фортрана количество таких применений возросло.
Возвращаясь к Фортрану 90 и использовавшемуся в вопросе использованию, %
используется для доступа к компонентам производного типа. Рассмотрим производный тип a_t
с объектом a
этого типа:
type a_t
real rho, sigma
end type
type(a_t) a
Компоненты rho
и sigma
из a
могут быть доступны с помощью a%rho
и a%sigma
. Как видно из вопроса, эти компоненты могут использоваться в выражениях (например, a%rho * g
) или могут быть левой частью присваивания (a%rho=1.
).
Компонент производного типа может сам по себе быть объектом производного типа:
type b_t
type(a_t) a
end type
type(b_t) b
и, следовательно, может быть несколько появлений %
в одной ссылке:
b%a%rho = ...
Здесь компонент rho
объекта производного типа a
, который сам является компонентом b
, является целью назначения. Можно увидеть довольно ужасающее число %
с в одной ссылке, но ссылки на детали всегда разрешаются слева направо.
Переходя к Fortran 2003, можно увидеть %
, относящийся к производным типам несколькими другими способами:
- ссылка на привязку объекта;
- запрос параметров параметризованного типа.
Рассмотрим производный тип
type a_t(n)
integer, len :: n=1
real x(n)
contains
procedure f
end type
type(a_t(2)) a
Объект a
имеет один параметр типа длины и процедуру с привязкой к типу. В выражении типа
x = a%f()
ссылка на f
объекта производного типа указана.
Параметр n
из a
может указываться как
print *, a%n, SIZE(a%x)
так же, как на компонент x
можно ссылаться.
Наконец, из Fortran 2008, %
может использоваться для доступа к реальной и воображаемой частям сложного объекта:
complex x, y(3)
x%im = 1.
x%re = 0.
y = (2., 1.)
print *, y(2)%im+y(3)%re