2008-10-21 27 views

Trả lời

22

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 
2

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.

+1

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

1
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 
... 
2

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 
Các vấn đề liên quan