我正在使用GNAT GPS studio IDE以便在Ada中进行一些培训。我在软件包可见性方面遇到问题。
首先,我在名为“ DScale.ads”的文件中指定一个包含以下类型的包:
package DScale is
type DMajor is (D, E, F_Sharp, G, A, B, C_Sharp);
end DScale;
然后,在另一个文件(“ Noteworthy.ads”)中指定一个包,该包定义了将使用DScale包的DMajor类型的过程:
with Ada.Text_IO;
with DScale;
package NoteWorthy is
procedure Note;
end NoteWorthy;
最后,在“ Noteworthy.adb”中,为“ Noteworthy”包提供了包主体:
with Ada.Text_IO; use Ada.Text_IO;
package body Noteworthy is
procedure Note is
package ScaleIO is new Enumeration_IO(DScale.DMajor);
thisNote : DScale.DMajor := DScale.D;
begin
ScaleIO.Get(thisNote);
if thisNote = DScale.DMajor'First then
Put_Line("First note of scale.");
end if;
end Note;
begin
null;
end NoteWorthy;
如果按原样保留代码,则“ Noteworthy”包主体中的“ if thisNote = DScale.DMajor'First then”语句将收到“操作员无法直接看到”错误。
有没有一种方法可以绕过此错误而无需使用“ use”或“ use type”子句?
谢谢。
最佳答案
您的问题至少有两个答案。
1:
if DScale."=" (thisNote, DScale.DMajor'First) then
2:
function "=" (Left, Right : DScale.DMajor) return Boolean renames DScale.DMajor;
...
if thisNote = DScale.DMajor'First then
但是,为什么要使用这些选项之一而不是:
use type DScale.DMajor;
...
if thisNote = DScale.DMajor'First then