gpt4 book ai didi

ada - "use"的使用。它不仅仅消除了对前缀的需要?

转载 作者:行者123 更新时间:2023-12-03 23:11:30 27 4
gpt4 key购买 nike

以下程序 (main.adb) 将无法编译,并出现错误:

main.adb:10:15: expected private type "ThreadName" defined at config.ads:5
main.adb:10:15: found private type "Ada.Strings.Unbounded.Unbounded_String"
main.adb:11:45: expected private type "Ada.Strings.Unbounded.Unbounded_String"
main.adb:11:45: found private type "ThreadName" defined at config.ads:5
然而,当我添加一个“使用配置;”条款并删除配置。在 main.adb 中 MyName 声明的前缀,它编译干净并正常工作。我明白使用“use”子句只是为了让我避免使用 namespace 前缀,但它似乎还有很多作用。谁能解释一下?
文件 config.ads 包含
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
package Config is
type ThreadName is new Unbounded_String;
end Config;
我的 main.adb 包含:
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Config;

procedure Main is

MyName : Config.ThreadName;

begin
MyName := To_Unbounded_String ("Chris");
Put_Line ( "The name is: " & To_String (MyName));
end Main;

最佳答案

Use 还使对包中定义的类型的隐式定义的操作可见......在此示例中包括 To_Unbounded_String 反之亦然。
还有 Use Type 使操作可见,而不会用包中的所有内容污染命名空间;但它只公开运算符(+、-、= 等),而

with Config;
use all type Config.Threadname;
将使 Config.Threadname 的类型、运算符和其他子程序可见不暴露包中的其他任何东西。

关于ada - "use"的使用。它不仅仅消除了对前缀的需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64593623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com