Domanda

Sto cercando di riordinare i miei pacchetti per un set di Componenti discendenti TFrame , lo trovo apparentemente necessario per spezzare alcuni dei miei discendenti di TFrame di utilità separati dai moduli di dialogo che li usano, principalmente perché i primi sono registrati nella tavolozza come componenti veri e che a volte sembrano confondere l'IDE rispetto ai moduli di dialogo che li usano. I moduli di dialogo a loro volta sono chiamati da componenti non visivi, che fanno parte di un terzo pacchetto. Questo, finora , sembra fare la maggior parte dei i reclami relativi alla dipendenza / confusioni scompaiono. (Non sono ancora uscito, comunque).

Durante la compilazione del pacchetto con i moduli di dialogo (che chiamano i frame), ricevo l'avviso " Unità 'MyFrames' implicitamente importata nel pacchetto 'MyDialogForms' "

Dato che si presenta come un avvertimento del compilatore, molto tempo fa ho avuto l'impressione che "importando implicitamente" un'unità generalmente non è una buona cosa. Ci sono casi specifici in cui non è così? cioè dove l'importazione implicita di un'unità è OK, e / o una pratica appropriata? ... e in tal caso, quali sono questi casi specifici?

È stato utile?

Soluzione

Ecco il problema:

Puoi avere solo una copia di un'unità nel tuo programma. Se si tenta di caricare la stessa unità due volte tramite pacchetti, genererà un'eccezione e il pacchetto non verrà caricato la seconda volta. Il modo per evitarlo è strutturare i pacchetti in modo che nessuna unità venga utilizzata in più di uno di essi.

Il codice per ogni unità compilata deve essere nel pacchetto. Il compilatore inizierà con tutte le unità dichiarate nella sezione contiene , ma anche tutte le altre unità utilizzate da tali unità devono essere compilate in modo che siano raggiungibili, a meno che tali unità non siano contenute in un altro pacchetto che è elencato in richiede . Questi extra sono le "quotazioni implicitamente importate" unità. Il problema è che vengono importati in modo implicito , non esplicitamente indicato nella sezione contiene in cui verranno facilmente visualizzati nel Project Manager a destra. Questo significa che potresti non notare che la tua unità è in un pacco e finire per metterlo in un altro. Quindi, quando si tenta di eseguire il programma e caricare i pacchetti, le cose si rompono. Ecco perché il compilatore ti avverte al riguardo.

È un avvertimento, e non un errore, per un motivo. Finché capisci come funziona il sistema, è tecnicamente sicuro usare le importazioni implicite. Ricorda solo che quelle unità stanno finendo nel pacchetto, che tu le dichiari o meno. Ma poi di nuovo, dato che stanno finendo lì, che tu li dichiari o no, è probabilmente più semplice semplicemente aggiungerli ufficialmente e salvarti la seccatura.

Altri suggerimenti

+1 per Risposta di Mason . Il luogo in cui le unità importate implicitamente diventano un problema si trova in un grande progetto in cui diventa esponenzialmente più difficile tenere traccia delle unità collegate da qualsiasi luogo.

Trovo di gran lunga il modo migliore di avere una cartella per pacchetto, e quella cartella contiene tutti i file per il pacchetto. Se vedo un '"importazione implicita" attenzione, aggiungo il pacchetto richiesto o aggiungo l'unità al pacchetto. Quindi tutte le unità sono specificate nel pacchetto che le contiene e si trovano tutte nella stessa cartella. Non aggiungo mai cartelle al percorso di ricerca, perché ogni progetto conosce direttamente tutti i suoi file.

La struttura non è davvero molto difficile da mantenere e ti protegge dai problemi in cui unità diverse contengono versioni diverse di un file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top