2010-08-01 20 views
7

Dinamik yazım alıştırmada nesne/nesne olmayan yapı tipinin tip bilgisini kontrol etmek ve bir çeşit tip hatası atmak için kullanıyorum, ör. Ördek ördeğiyle bir ördeğe benziyorsa. Farklı tipte bir dinamik yazım var mı (lütfen detaylara bakınız).Dinamik Yazma?

cevap

1

Hayır, dinamik yazım, değerlerin türüne ancak değişkenlere sahip olmamasıdır, bu nedenle çoğu tür denetimi çalışma zamanında yapılır. Öyleyse, temelde, eğer değer bir ördek gibi yürür ya da kaçarsa, o bir ördektir, bir hata atılır. Ördek yazarak gerçekten sadece dinamik yazmayı sağlayan bir yazı tipini açıklar (bu, bir yöntem yalnızca foo değişkeninin doğru özniteliğe sahip olması durumunda çalışır veya bu yöntemi çalıştırabilir).

+4

Bu yanlış. Türü denetlemez, yalnızca türün bazı X operatörünü yapabilir veya Y özelliğine sahip olabilir. Değişken üzerinde toString() diyorsanız, o zaman bir nesne ise ve toString() yöntemini uygular. Daha sonra çağrılır, aksi halde, bir hata alırsınız. Ancak birçok tür bu gerekliliği yerine getirebilir. – siride

+0

İyi nokta, ben bir düzenleme yapacağız –

5

Evet, kesinlikle. Ördek yazması, şu andaki bir değerin türünün şu anda sahip olduğu alanlara ve yöntemlere dayandığını söyleyen bir deyimdir. Dinamik yazım, sadece türlerin, statik değişkenler ve parametrelerle değil, çalışma zamanı değerleriyle ilişkilendirildiğini söylüyor. İkisi arasında bir fark var ve ikincisini eski olmadan kullanabilirsiniz. Örneğin, PHP'de programladıysanız ve OO kullanmadan temel türlerle sınırlandırdıysanız, ördek tipi yazmayı kullanmadan dinamik yazmayı kullanıyor olmanız gerekir. Örneğin;

+0

Örneğinizi detaylandırır mısınız? basitçe, çalışma zamanı denetiminin dinamik yazım olduğunu, nesnelerin yöntem ve özelliklerinin varlığını test etmeye dayalı olarak kontrol edilmesinin ördek yazması olarak adlandırıldığını mı söylüyorsunuz? Yani, iki arasındaki farkın * nesnelerle * alakası olduğunu söyleyebilir miydiniz? Her iki durumda da (ördek olmayan dinamik ve ördek yazarak), belirli işlemlerin (yöntem çağrısı, toplama, vb.) Giriş değerleri ile uyumluluğunun çalışma zamanında kontrol edildiğine benziyor; bu doğru mu? tek fark, ördek tiplemenin nesneleri ilgilendirmesi ve bu dinamik yazmanın daha genel olması, doğru mu? – EOL

+1

@EOL: Evet, yazım denetimi dinamik yazıyor (gerçekten 'dinamik kontrol' olarak adlandırılıyor, özellik varlığını kontrol etmek için ördek yazıyor. Nesneleri ilgilendiren şey, bunun doğru olduğunu söylemek için biraz belirsiz. Ama bence İkisi de aynı sayfada. –

+0

Şimdi, ikisi arasındaki ayrımı daha iyi görüyorum. – EOL