tôi đang cố gắng để có được một sự hiểu biết tốt hơn về các hành vi sau đây:Scala loại vọt & sai
scala> class C[-A, +B <: A]
<console>:7: error: contravariant type A occurs in covariant position
in type >: Nothing <: A of type B
class C[-A, +B <: A]
^
Tuy nhiên các công việc sau:
scala> class C[-A, +B <% A]
defined class C
tôi có thể thấy rằng có thể có vấn đề từ phương sai của các biến giới hạn và giới hạn được đối lập, mặc dù tôi không rõ ràng về vấn đề cụ thể là gì. Tôi thậm chí còn ít rõ ràng hơn về lý do tại sao việc thay đổi loại bị ràng buộc thành một khung nhìn bị ràng buộc làm cho mọi việc trở nên ổn thỏa. Trong trường hợp không có chuyển đổi tiềm ẩn áp dụng, tôi mong đợi hai định nghĩa sẽ có tác động tương tự. Nếu bất cứ điều gì tôi mong đợi một quan điểm ràng buộc để cung cấp nhiều cơ hội cho sự nghịch ngợm.
Đối với một chút của nền tôi xác định lớp mà nằm trong một số cách như chức năng, và tôi muốn làm một cái gì đó giống như
CompositeFunc[-A, +B <: C, -C, +D] (f1 : BaseFunc[A, B], f2 : BaseFunc[C, D])
extends BaseFunc[A, D]
Có thể cho rằng
CompositeFunc[-A, +B <% C, -C, +D] (f1 : BaseFunc[A, B], f2 : BaseFunc[C, D])
extends BaseFunc[A, D]
thực sự là một lợi thế, nhưng tôi sẽ vẫn muốn hiểu rõ hơn những gì đang xảy ra ở đây.
hấp dẫn ... Tôi đã dành 1 giờ tìm kiếm một ví dụ trong đó loại phá vỡ an toàn với các loại ràng buộc. Không tìm thấy: ( – gzm0
Ngoài ra, nếu có một ví dụ không được gắn kết với loại bị ràng buộc, thật khó để thấy cách thay thế trong một khung nhìn bị ràng buộc sẽ sửa chữa nó. –
Vâng, tôi đồng ý một chút. luôn luôn chuyển đổi theo các loại lớp đã được tạo ra với, trong khi điều này không nhất thiết phải là trường hợp với các loại ràng buộc. (nói trực giác của tôi ít nhất ...) – gzm0