डेल्फी एक्सई -2 का उपयोग (सभी अपडेट लागू)।मैं उस प्रकार के एक प्रकार के खुले सरणी पैरामीटर में एक प्रकार का एक्स क्यों पास कर सकता हूं?
मैं निम्नलिखित कोड को DoSomething और DoInteger कॉल पर संकलन त्रुटियों को उत्पन्न करने की अपेक्षा करता हूं, लेकिन ऐसा नहीं है। दोनों ही एकल चर, अपने-अपने प्रकार का एक खुला सरणी पैरामीटर के लिए []
के बीच और संकलक यह मुझ पर barfing अभी वापस बिना यह डाले बिना -
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 पारित कर सकते हैं व्याख्या कर सकते हैं?
मैंने सोचा कि इसे इंटरफेस की एक सरणी, या यहां तक कि जेनेरिक भी शामिल हो सकता है, लेकिन कंपाइलर पूर्णांक की खुली सरणी में भी एक पूर्णांक को स्वीकार करता है।
यह त्रुटि E2192 के लिए प्रलेखन में है: "ओपन सरणी तर्कों को एक वास्तविक सरणी चर, एक निर्मित सरणी या तर्क के तत्व प्रकार के एक चर के साथ आपूर्ति की जानी चाहिए।" मैं इसे दस्तावेज में नहीं देखता जहां मुझे यह खोजने की उम्मीद थी, हालांकि। – hvd
ठीक है, मैं डर जाएगा ... धन्यवाद डेविड। और उस त्रुटि दस्तावेज को खोदने के लिए @hvd धन्यवाद। बिल्कुल ऐसी जगह नहीं है जहां आप ऐसी जानकारी ढूंढने की उम्मीद करेंगे। –
@hvd अच्छी तरह से खेला वास्तव में। मुझे यह जानना अच्छा लगेगा कि पृथ्वी पर आपको यह कैसे मिला? –