Làm cách nào để khai báo chức năng riêng tư ở Fortran?Chức năng riêng tư ở Fortran
Trả lời
này sẽ chỉ làm việc với một mô-đun Fortran 90. Trong khai báo mô-đun của bạn, bạn có thể chỉ định giới hạn truy cập cho danh sách các biến và thủ tục sử dụng từ khóa "công khai" và "riêng tư". Tôi thường thấy hữu ích khi sử dụng từ khóa riêng của chính nó ban đầu, trong đó xác định rằng mọi thứ trong mô-đun là riêng tư trừ khi được đánh dấu công khai một cách rõ ràng.
Trong mẫu mã bên dưới, subroutine_1() và function_1() có thể truy cập từ bên ngoài mô-đun thông qua câu lệnh "sử dụng" cần thiết, nhưng bất kỳ biến/chương trình con/hàm khác sẽ là riêng tư.
module so_example
implicit none
private
public :: subroutine_1
public :: function_1
contains
! Implementation of subroutines and functions goes here
end module so_example
Tôi chưa bao giờ viết dòng FORTRAN, nhưng this thread about "Private module procedures" dường như là chủ đề, ít nhất tôi cũng hy vọng như vậy. Dường như có chứa câu trả lời, ít nhất.
jaredor Tóm lại:
Thuộc tính public/private tồn tại trong mô-đun trong Fortran 90 và sau đó. Fortran 77 và trước đó - bạn đã hết may mắn.
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
...
Nếu bạn sử dụng mô-đun, đây là cú pháp:
PUBLIC :: subname-1, funname-2, ...
PRIVATE :: subname-1, funname-2, ...
Tất cả các đối tượng được liệt kê trong PRIVATE sẽ không thể truy cập từ bên ngoài của các mô-đun và tất cả các tổ chức niêm yết ở nơi công cộng có thể được truy cập từ bên ngoài mô-đun. Tất cả các thực thể khác, theo mặc định, có thể được truy cập từ bên ngoài module.
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
Sự khiêm tốn dễ hiểu của bạn, bạn có thể tin tưởng hơn, nhưng bạn có thể dứt khoát hơn: Câu trả lời nằm trong chuỗi đó. Thuộc tính public/private tồn tại trong các module trong Fortran 90 và mới hơn. Fortran 77 và trước đó - bạn đã hết may mắn. – jaredor