Saya telah bekerja dengan banyak bahasa yang tidak menghasilkan metode tanda tangan berdasarkan tipe pengembalian. Saya juga pernah bekerja dengan satu (mungkin beberapa?) Yang bisa. Yang tidak memberi saya masalah di masa lalu (seperti di sini ). Mengapa bahasa pemrograman menghasilkan tanda tangan metode tanpa memperhatikan jenis pengembalian?
Pembaruan: Saya merujuk khusus untuk mengkompilasi bahasa yang diketik secara statis
programming-languages
Charles Lambert
sumber
sumber
Jawaban:
Itu tidak akan cocok dengan typecasting dan ketik hierarki. Jika Anda memiliki dua versi metode, yang salah satunya mengembalikan tipe A dan yang mengembalikan tipe B, Anda mengalami masalah ketika:
Anda bisa menyiasati ini dengan gips, tetapi itu akan membutuhkan banyak mengetik seperti mengubah nama salah satu fungsi. Anda juga bisa mendaftarkan kesalahan kompiler ketika panggilan ambigu, dalam hal ini pengguna perlu menghabiskan upaya yang serupa.
sumber
Karena Anda dapat memanggil metode dan tidak menetapkan hasilnya.
sumber
Rule of thumb: bahasa yang diketik sangat biasanya mengikat tanda tangan metode ke jenis kembali. Bahasa yang diketik dengan lemah tidak.
Saya tidak tahu C #, tapi saya berasumsi bahwa masalahnya mungkin karena cara C # menangani obat generik. Mungkin menciptakan metode yang sama sekali berbeda untuk yang umum, dalam hal ini mereka benar-benar dua metode yang berbeda.
sumber