9
使用Delphi XE-2(應用了所有更新)。爲什麼我可以將類型X的var傳遞給該類型的開放數組參數?
我期望以下代碼在DoSomething和DoInteger調用上生成編譯錯誤,但它不會。
program OpenArrayQuestion;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
IComposite = interface(IInterface)
['{1AC3CF6A-1316-4838-B67B-9FB075585C1E}']
end;
IComposite<T: IComposite> = interface(IComposite)
['{7F866990-9973-4F8E-9C1F-EF93EF86E8F2}']
end;
function DoSomething(const aData: array of IComposite): Boolean;
begin
Result := True;
end;
function DoInteger(const aData: array of Integer): boolean;
begin
Result := True;
end;
var
FData: IComposite;
FInteger: Integer;
begin
DoSomething(FData);
DoInteger(FInteger);
end.
有人可以解釋爲什麼我可以通過FDATA/FInteger - 都只是單一變量,它們各自類型的開放數組參數,而不把它[]
的之間並沒有編譯器在我barfing它右後衛?我認爲它可能與一個接口數組,甚至涉及的泛型有關,但編譯器也接受一個傳遞給一個整數開放數組的整數。
它在錯誤E2192的文檔中:「Open數組參數必須提供一個實際的數組變量,一個構造數組或單個變量的參數元素類型。」儘管如此,我沒有在我期望找到它的文檔中看到它。 – hvd
嗯,我會很高興的......謝謝大衛。並感謝@ hvd挖掘錯誤文檔。不完全是你期望找到這樣的信息的地方。 –
@ hvd好了,我很想知道,你究竟是怎麼發現的? –