Tôi muốn làm điều gì đó như thế này (ví dụ được đơn giản hóa, nhưng có chứa tất cả các mảnh quan trọng):Puzzle - phơi bày một công tiểu thành viên của thành viên riêng với kiểu tùy chỉnh
class Master
{
type DataType = Int
var counter : DataType = 0
}
class Slave(private val master : Master)
{
val counter = master.counter // (*)
}
Và đây (*) tôi nhận được lỗi:
private value master escapes its defining scope as part of type Slave.this.master.DataType
val counter = master.counter
tôi hiểu ra lỗi, nhưng tôi không hiểu được lý do - loại là một phần của lớp Master
, không phải là đối tượng master
, vì vậy điều quan trọng là nếu lớp là tư nhân, không phải là một đối tượng. Vâng, ít nhất là trong lý thuyết.
Nó rất dễ dàng để thực hiện một workaround nhanh:
val counter : Master#DataType = master.counter
Nhưng tôi tin rằng đây là một phiên bản rõ ràng của mã chính xác giống như trước, nó "chỉ" mất gõ hơn. Đây có phải là tính năng không?
HỎI:
một loại (đây DataType) Có thể phụ thuộc của đối tượng, và không phải là lớp học (ví dụ: loại định nghĩa cho mỗi thể hiện của lớp) trong Scala?
Cảm ơn bạn, vì vậy nếu tôi hiểu điều này một cách chính xác (tuy nhiên tôi không đọc nó trong "Lập trình trong Scala" tôi tin - hoặc có thể nó bị trượt), bạn có thể xác định loại cho mỗi thể hiện của lớp, không chỉ cho mỗi lớp . – greenoldman
Cảm ơn bạn đã cập nhật, điều này rất có giá trị, tiếc là tôi không thể upvote bài viết của bạn nhiều hơn 1 :-) – greenoldman
Đây là một trong những điều hữu ích trong Scala có thể là một "gotcha" khi đến từ các ngôn ngữ OOP khác. Câu trả lời rất gọn gàng; giá trị upvote của tôi;). – TechNeilogy