Domanda
Come posso dichiarare una funzione privata in Fortran?
Soluzione
Funzionerà solo con un modulo Fortran 90. Nella dichiarazione del tuo modulo, puoi specificare i limiti di accesso per un elenco di variabili e routine usando il "quot" pubblico " e "privato" parole chiave. Di solito trovo utile usare inizialmente la parola chiave privata da sola, il che specifica che tutto all'interno del modulo è privato se non esplicitamente contrassegnato come pubblico.
Nell'esempio di codice riportato di seguito, la subroutine_1 () e la funzione_1 () sono accessibili dall'esterno del modulo tramite il "uso" richiesto , ma qualsiasi altra variabile / subroutine / funzione sarà privata.
module so_example
implicit none
private
public :: subroutine_1
public :: function_1
contains
! Implementation of subroutines and functions goes here
end module so_example
Altri suggerimenti
Se usi i moduli, ecco la sintassi:
PUBLIC :: subname-1, funname-2, ...
PRIVATE :: subname-1, funname-2, ...
Tutte le entità elencate in PRIVATO non saranno accessibili dall'esterno del modulo e tutte le entità elencate in PUBLIC sono accessibili dall'esterno del modulo. Tutte le altre entità, per impostazione predefinita, sono accessibili dall'esterno del modulo.
MODULE Field
IMPLICIT NONE
Integer :: Dimen
PUBLIC :: Gravity
PRIVATE :: Electric, Magnetic
CONTAINS
INTEGER FUNCTION Gravity()
..........
END FUNCTION Gravity
REAL FUNCTION Electric()
..........
END FUNCTION
REAL FUNCTION Magnetic()
..........
END FUNCTION
..........
END MODULE Field
Non ho mai scritto una riga di FORTRAN, ma questa discussione su " Procedure del modulo privato " sembra essere d'attualità, almeno lo spero. Sembra contenere risposte, almeno.
jaredor riepilogo:
L'attributo public / private esiste all'interno dei moduli in Fortran 90 e versioni successive. Fortran 77 e precedenti: sei sfortunato.
Private xxx, yyy, zzz
real function xxx (v)
...
end function xxx
integer function yyy()
...
end function yyy
subroutine zzz ( a,b,c )
...
end subroutine zzz
...
other stuff that calls them
...