Có cách nào để xác định một tập hợp các lựa chọn thay thế của một loại phổ biến:Scala - đôi bên cùng có những đặc điểm độc quyền
trait Mutability
trait Mutable extends Mutability
trait Immutable extends Mutability
và có trình biên dịch ngăn cản cái gì đó như:
object Hat extends Mutable with Immutable
Tôi tin rằng tôi có thể lực lượng một số lỗi biên dịch bằng cách có một phổ biến, mâu thuẫn thành viên nhưng được thông báo lỗi là một chút xiên:
trait Mutability
trait Mutable extends Mutability { protected val conflict = true }
trait Immutable extends Mutability { protected val conflict = true }
object Hat extends Mutable with Immutable
<console>:10: error: object Hat inherits conflicting members:
value conflict in class Immutable$class of type Boolean and
value conflict in class Mutable$class of type Boolean
(Note: this can be resolved by declaring an override in object Hat.)
object Hat extends Immutable with Mutable
Có cách nào trực tiếp hơn để thể hiện ràng buộc này và không cho phép ai đó làm việc xung quanh nó bằng cách lấy gợi ý được cung cấp bởi trình biên dịch (ghi đè 'xung đột' trong Hat)?
Thanks cho bất kỳ những hiểu biết
Điều này đạt được mục tiêu gì? Tôi không thể nhớ lại bất cứ lúc nào tôi muốn làm điều này .. – Daenyth
Đầu tiên, cảm ơn những ý tưởng bên dưới, vẫn đang cân nhắc xem liệu tôi có thể có được một giải pháp kín (không cho phép sai lầm tất cả quá dễ dàng không " MutabilityLevel [Mutability] "để trượt qua). Thứ hai, theo mục tiêu. Có hai mức mục tiêu: (1) đặc điểm đánh dấu cho các trình xử lý tín hiệu mà chúng có thể an toàn không xử lý các sự kiện cập nhật cho các trường hợp loại này và (2) thực sự mở rộng đặc điểm Mutable để xác định các sự kiện đó: Sự kiện lớp [T <: Mutable ] Ví dụ: { trường hợp thêm lớp (T) trường hợp loại bỏ (T) }. – jmcnulty
'lớp Mat (tên: Chuỗi) mở rộng Mutable' ' lớp Pat mở rộng Không thể xóa ' Trình xử lý có thể giả định rằng đối tượng PatEvents mở rộng Sự kiện [Pat] 'không thể biên dịch và' PatEvents.Add/Remove' không tồn tại – jmcnulty