2016-04-29 3 views
0

У меня есть FORtran функции для изменения регистра строкиФункция возврат меняет свой вклад

Function chcase (a) Result (b) 
Character (Len=:), Allocatable :: b 
Character (Len=*), Intent (In) :: a 

Create string s, upper case of string a 
... 
b = Trim (s) 

End Function chcase 

Я хочу, чтобы иметь возможность изменить регистр, используя ту же строку, вызвав

s = chcase (s) 

В случае, если Я лучше использовать

Character (Len=*), Intent (InOut) :: a 

Использование Intent (In) Я все еще получаю правильный результат

ответ

2

С точки зрения спецификации языка для синтаксиса s = chcase(s) оценка задания функции chcase(s) завершена до того, как результирующее значение будет присвоено s.

Соответствующая спецификация INTENT, которая должна использоваться, отражает характер фиктивного аргумента в течение всего жизненного цикла выполнения соответствующей процедуры. Вероятно, это INTENT(IN), если заданное содержимое функции chcase является разумным.

К тому времени, когда задание выполняется, спецификация намерения фиктивного аргумента функции не имеет значения - функция завершила выполнение, а фиктивный аргумент больше не существует.

(У Fortran 77 были ограничения с точки зрения самоначисления на символьные переменные, но они не актуальны сегодня - Fortran 77 также не имел спецификаций INTENT или результатов функции ALLOCATABLE.)

Смежные вопросы