我正在阅读Delphi XE中的RAD Studio Documentaion.这里有一些文字.
[Delphi参考 - > Delphi语言指南 - >程序和单元 - >使用命名空间 - >搜索命名空间 - >多单元命名空间]
多单元命名空间
如果单元声明引用相同的命名空间,则多个单元可以属于同一命名空间.例如,可以使用以下单元声明创建两个文件unit1.pas和unit2.pas:
// in file 'unit1.pas'
unit MyCompany.ProjectX.ProgramY.Unit1
// in file 'unit2.pas'
unit MyCompany.ProjectX.ProgramY.Unit2
Run Code Online (Sandbox Code Playgroud)
在此示例中,命名空间MyCompany.ProjectX.ProgramY逻辑上包含unit1.pas和unit2.pas中的所有接口符号.
命名空间中的符号名称必须是唯一的,跨命名空间中的所有单元.
在上面的示例中,Unit1和Unit2都定义了一个名为mySymbol的全局接口符号,这是一个错误
我测试了这个.代码如下.
-----------------------------------------------------------------
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Lib.A in 'Lib.A.pas',
Lib.B in 'Lib.B.pas';
begin
WriteLn ( TestValue ) ;
ReadLn ;
end.
-----------------------------------------------------------------
unit Lib.A;
interface
const TestValue : Integer = 10 ;
implementation
end.
-----------------------------------------------------------------
unit Lib.B;
interface
const TestValue : Integer = 10 ; …Run Code Online (Sandbox Code Playgroud) 这编译成功:
test = f id
f :: (a -> b -> c) -> String
f g = "test"
Run Code Online (Sandbox Code Playgroud)
id有 type a -> a,但f有一个 type 的第一个参数(a -> b -> c)。
我认为它不应该编译。我不明白。