2010-12-14 18 views
11

Objective-C nie obsługuje przeciążania metod.
Dlaczego?
Czy jest to możliwe, ale Apple nie zdecydowało się go wdrożyć? lub nie jest to możliwe ze względu na dynamiczny charakter Objective-C?Dlaczego Objective-C nie obsługuje przeciążania metod?

Mam wrażenie, że przeciążanie metod można wykonać na skompilowanych językach (Java, C#) i nie można tego zrobić w językach interpretowanych (Ruby, Python).
Czy spełnia pewne wymagania?

Odpowiedz

26

Rozróżnienie, które ma tu znaczenie, nie występuje między językami skompilowanymi i interpretowanymi, ale między typami statycznymi (Java, C#) i dynamicznie wpisanymi (Ruby, Python, Objective-C). W dynamicznie pisanym języku informacje o typie często nie są znane przed uruchomieniem. W czasie wykonywania wszystkie obiekty są statycznie wpisywane jako id w Objective-C.

Dodatkowo, podstawową ideą w dynamicznie typowanych językach OO jest to, że nie należy przejmować się tym, jaki typ obiektu jest tak długi, jak odpowiada wiadomościom, które chcesz wysłać. Tak więc przeciążanie w oparciu o typ będzie latać w obliczu tego.

+1

hipotetycznie, czy możliwe jest posiadanie dynamicznie wpisanego języka, który obsługuje przeciążanie metod? czy taki język istnieje teraz? – Chiron

+1

Hipotetycznie? Pewnie; może to nawet zostać wykonane na Objective-C dzisiaj, jeśli chcesz tam pojechać (i jeśli chcesz całkowicie odejść od istniejących standardów kodowania). To naprawdę nie byłoby nawet "takie trudne" (w każdym razie dla niektórych wartości "twardych"). – bbum

+0

Obawiam się, Chuck, nie zrozumiałem twojej odpowiedzi. Czy możesz wyjaśnić, co próbujesz powiedzieć? – Nitish

Powiązane problemy