如何私下在另一个单元中引用/使用Pascal单元?

问题描述 投票:0回答:1

我是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;”就在“界面”之后但是我想知道出于好奇心,有什么方法可以让它在实施中“隐藏”......?我希望这个问题很清楚。

pascal freepascal
1个回答
0
投票

Rudy Velthuis回答了你的问题。对于您的简单原型,请使用2x2静态数组。但是,我认为你有充分的理由让matrix(这里是TMatrix)成为一种新类型,并且有记录而不是类。

如何隐藏您的TMatrix类型?

  • 选项1.真正隐藏。在单元的实现部分声明你的TMatrix类型。这样您就可以将此类型视为实现细节。它不会被分享。此实现细节中的更改不会传播到其他单元: interface procedure evaluate_prediction(var p : TPlayer); implementation type TMatrix = array of array of integer; var real_board, game_board :TMatrix;
  • 选项2.实施使用。在某些单位的界面部分声明你的TMatrix类型,让我们说(如你所做)board.pas。现在,使用此类型且自包含的所有内容都应在此单元中声明。其他单元应仅在其实现部分中使用此类型,并且所有非自包含方法也应在其实现部分中声明。 unit board interface type TMatrix = array of array of integer; var real_board, game_board :TMatrix; implementation
© www.soinside.com 2019 - 2024. All rights reserved.