So rufen Sie eine Funktion innerhalb einer subroutine in einem Modul?
Ich habe ein Modul, enthält eine Unterroutine, die wiederum enthält eine Funktion. Ich sage use themodule
in meinem main-Programm und ich kann call thesubroutine
, aber wie greife ich auf die Funktion, die enthalten ist in der Unterroutine?
Der code sieht so aus:
module useful
integer, parameter :: N=2
double precision, parameter :: xmin=1, xmax=10, pi=3.1415926535898
double complex :: green(N,N), solution(N), k=(2.0,0.0)
contains
subroutine y(n1)
contains
function x(n1)
real :: n1, x
x=n1*(xmax-xmin)/N
end function x
end subroutine y
end module useful
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Klärung der Antwort von M. S. B., aufgeteilt Ihren code wie folgt, stellt fest, wie die Funktion x() wurde extrahiert aus Unterprogramm y() und es gibt nur einen einzigen 'enthält' - Anweisung separaten Modul-level-Deklarationen von Variablen aus der Funktion/Unterprogramm-Deklarationen:
M. S. B. Punkte aus x() und y() sind in dem gleichen Umfang, so gibt es nichts spezielles, das Sie tun müssen, um call (x) aus y().
Sollten Sie nicht enthalten, die die Funktion innerhalb des Unterprogramms. Haben Sie die Funktion, nachdem die subroutine auf. Nur so viele Prozeduren (Unterprogramme & Funktionen) in das Modul, wie Sie benötigen. Morgens starten Sie mit einem Unterprogramm oder function-Anweisung und beenden Sie Sie mit Ihren entsprechenden end-Anweisung. Nicht verschachteln Sie Sie im inneren miteinander ... statt, eine nach der anderen. Habe nur das Modul enthält eine Anweisung. Dann "verwenden", dass das Modul vom main-Programm oder eine Prozedur außerhalb des Moduls.
Die Unterprogramme und Funktionen in das Modul sind auch zugänglich auf einander. Keine Notwendigkeit, eine "enthält".
Einige zusätzliche Bemerkungen.
Sie können die Funktion innerhalb der Unterroutine, wenn diese Funktion verwendet wird, die durch dieses Unterprogramm nur. In diesem Fall die Verschachtelung der Funktionen ist ein sinnvolles Konzept.
Wenn Sie ausblenden möchten einige Funktionen in die module für das externe Programm (für immer), erklären Sie diese versteckten Funktionen wie private in Ihrem Modul.
ich.e
mit öffentlichen und privaten hilft Ihnen, Fehler zu vermeiden mit Verunreinigungen Ihres namespace an, indem Sie die Anweisungen
Call function
x
von Unterprogrammy
schreiben(rechts) vor
contains
.