Menurut Spesifikasi Bahasa Scala :
... inferensi tipe lokal diizinkan untuk membatasi kompleksitas batas yang disimpulkan [parameter tipe]. Minimitas dan maksimalitas jenis harus dipahami relatif terhadap himpunan jenis kompleksitas yang dapat diterima.
Dalam praktiknya apa saja batasannya?
Selain itu, apakah ada batas berbeda yang berlaku untuk jenis ekspresi yang disimpulkan daripada batas jenis parameter, dan apa batas tersebut?
scala
type-inference
Owen
sumber
sumber
Jawaban:
Saat menyimpulkan tipe, compiler sering kali perlu menghitung Least Upper Bound (LUB) dari daftar tipe. Misalnya, tipe
if (cond) e1 else e1
adalah LUB dari tipee1
dane1
.Jenis ini bisa menjadi cukup besar, misalnya coba ini di REPL:
Komitmen ini memperkenalkan beberapa pemeriksaan kewarasan untuk membatasi kedalaman tipe yang disimpulkan tersebut.
Ada beberapa pekerjaan baru-baru ini untuk dimasukkan ke dalam proses kompilasi untuk mendeteksi tipe yang disimpulkan yang membutuhkan waktu lama untuk dihitung, dan menyarankan tempat di mana anotasi tipe eksplisit mungkin lebih bijaksana.
sumber