سؤال
وكيف أعلن وظيفة خاصة في فورتران؟
المحلول
وهذا سوف يعمل فقط مع 90 وحدة فورتران. في إعلان الوحدة النمطية الخاص بك، يمكنك تحديد حدود الوصول للحصول على قائمة من المتغيرات والروتينية باستخدام "العامة" وكلمات "خاصة". وعادة ما أجد أنه من المفيد استخدام الكلمة في حد ذاته خاصة في البداية، والتي تنص على أن كل ما في وحدة والخاص ما لم يشر صراحة الجمهور.
في نموذج التعليمات البرمجية أدناه، subroutine_1 () وfunction_1 () يمكن الوصول إليها من خارج وحدة عن طريق شرطا "استخدام" بيان، ولكن أي متغير / روتين / وظيفة أخرى تكون خاصة.
module so_example
implicit none
private
public :: subroutine_1
public :: function_1
contains
! Implementation of subroutines and functions goes here
end module so_example
نصائح أخرى
إذا كنت تستخدم وحدات، وهنا هو بناء الجملة:
PUBLIC :: subname-1, funname-2, ...
PRIVATE :: subname-1, funname-2, ...
وسوف جميع الكيانات المدرجة في PRIVATE لا يمكن الوصول إليها من خارج وحدة وجميع الكيانات المدرجة في PUBLIC يمكن الوصول إليها من خارج الوحدة. جميع الكيانات الآخرين، افتراضيا، يمكن الوصول إليها من خارج الوحدة.
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
ولقد كتبت أبدا خط FORTRAN، ولكن <لأ href = "http://coding.derkeiler.com/Archive/Fortran/comp.lang.fortran/2004-01/1100.html" يختلط = " نوفولو noreferrer "> هذا موضوع حول" إجراءات وحدة خاصة " يبدو أن موضعي، على الأقل آمل ذلك. يبدو لاحتواء إجابات، على الأقل.
jaredor م> موجز:
<اقتباس فقرة>والسمة العامة / الخاصة موجودة ضمن وحدات في فورتران 90 و في وقت لاحق. فورتران 77 وفي وقت سابق - كنت؟ إعادة من الحظ
اقتباس فقرة>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
...