2016-09-20 4 views
-1

에이다, 나는 다음과 같은 사양 파일이 있습니다변수 초기화

GENERIC 
    TYPE Item IS PRIVATE; --type of array 
    size : integer; --size of array 
    PACKAGE gwar IS 
    function get_size return integer; 
    END gwar; 

그리고 몸 파일 :

with Ada.Text_Io; 
use Ada.Text_Io; 

package body gwar is 
    --Get_Size allows the txt file to specify how much space to allocate. 
    function get_size return Integer is 
     Filename : String := "win.txt"; 
     File : Ada.Text_IO.File_Type; 
     Line_Count : Integer := 0; 
     ReturnSize : Integer; 
    begin 
     Ada.Text_IO.Open(File => File, 
         Mode => Ada.Text_IO.In_File, 
         Name => Filename); 
     while Line_Count /= 1 loop 
     declare 
      Line : String := Ada.Text_IO.Get_Line(File); 
     begin 
      ReturnSize := Integer'Value(Line); 
      Line_Count := 1; 
     end; 
     end loop; 
     Ada.Text_IO.Close (File); 
     return ReturnSize; 
    end get_size; 

begin 
    null; 
end gear; 

내가 설정하고 싶은 내 sizeget_size에 의해 반환 된 값의 정수. 어떻게해야합니까? spec 파일에 내 size 변수 앞에 내 함수를 넣으려고했으나 파일 끝이 예상됩니다. size : integer := gwar.get_size 설정을 시도했지만 작동하지 않습니다. 이것이 가능한가?

+0

크기 var는 제네릭 사양의 일부입니다. 일반 사양 외부로 이동하고 일반을 인스턴스화 한 다음 get_size 함수를 호출해야합니다. – NWS

+0

'in out' 모드의 일반적인 공식'size'를 만들 수 있습니다 - [ARM 12.4] (http://www.ada-auth.org/standards/rm12_w_tc1/html/RM-12-4.html) –

답변

2

manuBriot's 비평을 고려하면 기술적으로 Simon Wright의 제안을 따라갈 수 있습니다. 필자는 제네릭 매개 변수에 값을 할당하는 방법에 초점을두기 위해 몇 가지 생략을했습니다.당신은 일반 인스턴스를 할 때, 인스턴스 신체의 효과가 값 2에 매개 변수 size를 설정하는 것입니다

GENERIC 
    TYPE Item IS PRIVATE; --type of array 
    size : in out integer; --size of array 
PACKAGE gwar IS 
    function get_size return integer; 
END gwar; 

with Ada.Text_Io; 
use Ada.Text_Io; 

package body gwar is 

    function get_size return Integer is 
     ReturnSize : Integer; 
    begin 
     ReturnSize := Integer'Value("2"); 
     return ReturnSize; 
    end get_size; 

begin 
    Size := Get_Size; 
end gwar; 

이 방법은 오류없이 그 get_size 수익을 제공.

2

송신 된대로 코드가 이상하게 보입니다.

  • 두 형식 매개 변수 ItemSize 패키지의 구현에 사용되지 않은 : 여기에 다양한 불일치의 빠른 리뷰입니다. 따라서 일반적인 패키지는 필요하지 않습니다. Get_Size은 함수이며 아무 곳에 나 정보를 저장할 필요가 없습니다 (다른 패키지의 호출자가 물론 로컬 변수에 저장하려고 할 수도 있음). 부작용없이 더 나은 가지고있는 기능이 때

  • Get_Size에서, 당신은 Line_Count는 항상 1로 설정되어 있기 때문에 오직 한 번 실행하는 루프를 가지고있다. 파일의 크기를 계산하는 더 나은 함수가 있습니다. 예를 들어 줄 수를 계산해야하는 경우 GNATCOLL.Mmap을 사용하여 메모리에있는 전체 파일을 한 번에 읽을 수 있습니다. 그것은 더 빠를 것이다.

  • 예를 들어 파일이 디스크에 없거나 읽을 수없는 경우 예외를 처리해야합니다.

  • 패키지 사용자가 해당 설명서를 볼 수 있도록 본문보다 Get_Size의 설명서가 본문에있는 것보다 더 좋습니다. 그건 당신이 사용하고 무엇을하면 GPS 편집기, Get_Size에 대한 모든 참조에 툴팁이 표시되고, 당신이 원하는 모든 당신이 봐야 파일의 크기를 결정하는 경우 이러한 도구 설명은 문서를

1

포함 Ada.Directories 패키지. 이 패키지에 대한 문서는 Ada 언어 참조 설명서의 A.16 절에 나와 있습니다. GPS 개발 환경을 사용하는 경우 도움말 메뉴를 통해 Ada Language Reference Manual에 액세스 할 수 있습니다.

Ada.Directories 패키지에는 파일 조작 및 이해를위한 다양한 기능과 절차가 포함되어 있습니다. 예를 들어 Exists 함수는 파일 이름을 매개 변수로 사용하고 명명 된 파일의 존재 여부를 나타내는 부울을 반환합니다. 파일 이름을 매개 변수로 사용하여 파일의 크기를 반환하는 Size 함수도 있습니다.

파일 크기를 확인하기 전에 파일이 있는지 확인하는 것이 좋습니다.

+0

크기 배열의. 크기 변수를 사용하여 배열에 공간을 할당합니다. –