Giả sử rằng tôi muốn viết một lớp trường hợp Stepper
như sau:lớp Trường hợp và tuyến tính của đặc điểm
case class Stepper(step: Int) {def apply(x: Int) = x + step}
Nó đi kèm với một đẹp toString
thực hiện:
scala> Stepper(42).toString
res0: String = Stepper(42)
nhưng nó không thực sự là một chức năng :
scala> Some(2) map Stepper(2)
<console>:10: error: type mismatch;
found : Stepper
required: Int => ?
Some(2) map Stepper(2)
Giải pháp thay thế là triển khai Function
đặc điểm ...
case class Stepper(step: Int) extends (Int => Int) {def apply(x: Int) = x + step}
Nhưng sau đó, tôi không thể có đối với việc thực hiện toString đẹp miễn phí nữa:
scala> Stepper(42).toString
res2: java.lang.String = <function1>
Sau đó, câu hỏi là: Tôi có thể có tốt nhất của hai thế giới ? Có một giải pháp mà tôi có thực hiện tốt đẹp toString
miễn phí VÀ thực hiện đặc điểm Function
. Nói cách khác, có cách nào để áp dụng tuyến tính theo cách mà cuối cùng là áp dụng đường cú pháp case class
?
Có, nó không thực sự tuyến tính, nhưng tôi không tìm thấy bất kỳ tên thích hợp nào khác cho nó. Và đó là loại mẹo tôi mong đợi, cảm ơn. – Nicolas
@Nicolas Tôi hiểu bạn rất rõ, tôi thấy mình thường xuyên khó mô tả một vấn đề chính xác khi tôi không chắc điều gì đang diễn ra. –
@Vlad: Tôi đã luôn tránh sử dụng mọi thứ từ 'scala.runtime' không hiển thị trong tài liệu API Scala. Tôi đồng ý rằng đây là một cách giải quyết thông minh, nhưng bạn có thực sự nghĩ rằng nó có giá trị nó, cho rằng có những giải pháp tốt như nhau mà sử dụng các tính năng ngôn ngữ Scala cũ đồng bằng? –