İki (gayri resmi) arabirimi uygulayan bir polimorfik nesne dizim var.Perl'de bir nesnenin bir yöntemi uygulayıp uygulamadığını nasıl belirlerim?
if (hasattr(obj, 'some_method')) {
# `some_method` is only implemented by one interface.
# Now I can use the appropriate dispatch semantics.
} else {
# This must be the other interface.
# Use the alternative dispatch semantics.
}
Belki böyle bir şey çalışır ?:
if (*ref(obj)::'some_method') {
# ...
ben zorluk sözdizimi alt yordam çağırmak denemek ve ne zaman söylüyorum vardır: Ben çizgisinde yansıması ile bunlar arasında ayrım yapmak mümkün istiyorum Bir altprogram referansı döndüğünde. Paket sembol tabloları ATM'ye fazla aşina değilim ve sadece bir şeyi kesmeye çalışıyorum. :-)
Şimdiden teşekkürler!
Bazı yöntemlerle ayrılmış bir yöntem adı olabilir mi, yoksa bunu uygularsanız kendinizi ayağınıza mı çekiyorsunuz? – cdleary
Nesneyi, tarafından döndürülen işlev referansına açıkça iletmeniz gerektiğini unutmayın: $ foo-> can ('some_method') -> ($ foo, @args). Alternatif olarak, $ sub = $ foo-> can ('some_method'); $ Foo -> $ alt (@args); –
'Can'ı geçersiz kılmaya karşı genel bir tedbir biraz kuvvetlidir. Bunu yapmak için iyi ve önemli nedenler var. – darch