Tôi đang trên tập thể dục 5.7 của "Scala cho Nóng lòng chờ đợi", nơi mà tôi cần phải tạo ra một Person lớp mà phải mất một tên : String trên constructor và có 2 thuộc tính firstName và lastName được điền từ tên được phân tách bằng khoảng trắng. thử nghiệm đầu tiên của tôi là:biến Constructor địa phương trong Scala
class Person(name:String) {
private val nameParts = name.split(" ")
val firstName = nameParts(0)
val lastName = nameParts(1)
}
Vấn đề là, mà bây giờ nameParts vẫn là một lĩnh vực tư nhân luôn có thể nhìn thấy trong lớp, trong khi thực tế chỉ nên tồn tại trong môi trường địa phương của constructor. Java tương đương với những gì tôi muốn sẽ là:
class Person{
private final String firstName;
private final String lastName;
Person(String name){
final String[] nameParts = name.split(" ");
firstName = nameParts[0];
lastName = nameParts[1];
}
}
Ở đây, nameParts tồn tại chỉ withing các nhà xây dựng, đó là những gì tôi đang hướng tới. Bất kỳ gợi ý về cách thức này có thể được thực hiện trong Scala?
Chú ý: tôi đã kết thúc việc tìm kiếm một nhiều hơn "Scalesque" cách:
class Person(name:String) {
val firstName::lastName::_ = name.split(" ").toList
}
nhưng tôi vẫn muốn nhận được một câu trả lời cho câu hỏi của tôi.
Ví dụ về việc sử dụng các biến tạm thời trong quá trình khởi tạo đối tượng trên [blog scala hàng ngày] (http://daily-scala.blogspot.hu/2010/02/temporary-variables -during-object.html). –
có thể trùng lặp của [Làm thế nào để bạn xác định một var địa phương/val trong constructor chính trong Scala?] (Http://stackoverflow.com/questions/1118669/how-do-you-define-a-local-var-val -in-the-primary-constructor-in-scala) –