我是Pascal的初学者。我试图在Pascal中创建一个简单的“预测”游戏。为此,我使用多个单元来抽象细节。一个单元是board.pas,我在其中声明了一个类型矩阵,它只是一个2x2数组。
matrix = array of array of Integer;
我想在另一个单元(players.pas)中使用这种类型,但我希望私有地实现(在实现中)并且不能在接口下公开。但是,如果我把
uses board.pas;
在实现中,编译器抛出错误“未找到标识符矩阵”,因为在我使用它的接口下面有一个程序“prototype”。这是代码:
interface
type
pType = (Human, Computer);
Player = record
player_name : record
firstname, lastname : String;
end;
score : Integer;
case player_type : pType of
Human : ();
Computer : (level, current_prediction : Integer)
end;
procedure getDetails(num : Integer; var p : Player);
procedure evaluate_prediction(var p : Player; real_board, game_board : matrix);
implementation
uses board;
我希望我的问题清楚。我可以把“使用board.pas;”就在“界面”之后但是我想知道出于好奇心,有什么方法可以让它在实施中“隐藏”......?我希望这个问题很清楚。
Rudy Velthuis回答了你的问题。对于您的简单原型,请使用2x2静态数组。但是,我认为你有充分的理由让matrix
(这里是TMatrix
)成为一种新类型,并且有记录而不是类。
TMatrix
类型。这样您就可以将此类型视为实现细节。它不会被分享。此实现细节中的更改不会传播到其他单元:
interface
procedure evaluate_prediction(var p : TPlayer);
implementation
type
TMatrix = array of array of integer;
var
real_board, game_board :TMatrix;
TMatrix
类型,让我们说(如你所做)board.pas
。现在,使用此类型且自包含的所有内容都应在此单元中声明。其他单元应仅在其实现部分中使用此类型,并且所有非自包含方法也应在其实现部分中声明。
unit board
interface
type
TMatrix = array of array of integer;
var
real_board, game_board :TMatrix;
implementation