2010-08-01 15 views
7

Sono abituato a senso tipizzazione dinamica controllo per il tipo di informazioni oggetto struttura/non orientato agli oggetti in fase di esecuzione e gettando una sorta di errore tipo, vale a dire se si starnazza come un'anatra sua un'anatra. Esiste un tipo diverso di digitazione dinamica (per favore vai nei dettagli).Digitazione dinamica senza digitazione anatra?

risposta

1

No, la tipizzazione dinamica è quando i valori hanno tipo, ma le variabili non lo fanno, quindi la maggior parte tipo di controllo viene effettuato in fase di esecuzione. Quindi, in sostanza, se il valore cammina o cova come un'anatra, è un'anatra, altrimenti viene generato un errore. Anatra tipizzazione realtà solo descrive una caratteristica di tipizzazione dinamica che assicura sarà typesafe (cioè un metodo funziona solo se la variabile foo 'ha l'attributo destra o può eseguire tale metodo).

+4

Questo è errato. Non controlla il tipo, solo che il tipo può eseguire qualche operatore X o ha qualche attributo Y. Se si chiama, ad esempio, toString() su una variabile, quindi se è un oggetto e implementa un metodo toString() , quindi verrà chiamato, in caso contrario, si ottiene un errore. Ma molti tipi potrebbero soddisfare questo requisito. – siride

+0

Buon punto, eseguirò una modifica –

5

Sì, assolutamente. Duck-typing è un idioma che dice che il tipo di valore in questo momento è basato sui campi e sui metodi che ha ora. La digitazione dinamica dice solo che i tipi sono associati a valori di runtime, non a variabili e parametri statici. C'è una differenza tra i due, e puoi usare quest'ultimo senza il primo.

Ad esempio, se programmato in PHP e voi stessi limitati ai tipi di base senza l'utilizzo di OO, allora si sarebbe utilizzando la tipizzazione dinamica senza usare anatra tipizzazione.

+0

Potresti approfondire il tuo esempio? stai semplicemente dicendo che il controllo del tipo in fase di esecuzione è la digitazione dinamica, mentre il controllo basato sulla verifica dell'esistenza di metodi e proprietà degli oggetti è chiamato digitazione anatra? cioè, diresti che la differenza tra i due ha a che fare con * oggetti *? In entrambi i casi (dinamica non anatra e digitazione anatra), sembra che la compatibilità di determinate operazioni (chiamata di metodo, aggiunta, ecc.) Con i valori di input sia verificata in fase di esecuzione; è giusto? l'unica differenza è che la digitazione anatra riguarda gli oggetti e che la digitazione dinamica è più generale, giusto? – EOL

+1

@EOL: Sì, il controllo del tipo è una digitazione dinamica (che dovrebbe essere chiamata "verifica dinamica", il controllo dell'esistenza della proprietà è la digitazione anatra. "La questione degli oggetti di interesse" è un po 'vaga per dire che è corretta, ma penso che Sono entrambi sulla stessa pagina –

+0

Grazie! Ora vedo meglio la distinzione tra i due. – EOL

Problemi correlati