EDIT: Tôi tiếp tục nhận được upvotes ở đây. Chỉ để ghi lại, tôi không còn nghĩ rằng điều này là quan trọng. Tôi không cần nó kể từ khi tôi đăng nó.Scala - mutable (var) tham số tham số phương thức
tôi muốn làm sau trong Scala ...
def save(srcPath: String, destPath: String) {
if (!destPath.endsWith('/'))
destPath += '/'
// do something
}
... nhưng tôi không thể beacuse destPath
là một val. Có cách nào để khai báo destPath
dưới dạng var?
Lưu ý: có những câu hỏi tương tự nhưng trong tất cả chúng, OP chỉ muốn sửa đổi mảng.
Xin đừng thông báo sau:
đột biến các thông số đầu vào thường được xem phong cách là xấu và làm cho nó khó khăn hơn để lý do về mã.
Tôi nghĩ rằng nó hợp lệ trong lập trình bắt buộc (Scala cho phép cả hai, phải không?) Và thêm một cái gì đó như tmpDestPath
sẽ chỉ thêm lộn xộn.
CHỈNH SỬA: Đừng hiểu lầm. Tôi biết rằng các chuỗi không thể thay đổi và tôi không muốn tham chiếu đến tham chiếu vì tôi không muốn sửa đổi dữ liệu của người gọi. Tôi chỉ muốn thay đổi tham chiếu cục bộ thành chuỗi mà người gọi đã cho tôi chuỗi của tôi (ví dụ: orig + '/'). Tôi muốn sửa đổi giá trị đó chỉ trong phạm vi của phương pháp hiện tại. Hãy xem, điều này hoàn toàn hợp lệ trong Java:
void printPlusOne(int i) {
i++;
System.out.println("i is: " + i);
System.out.println("and now it's same: " + i);
}
Tôi không phải tạo biến mới và tôi không phải tính i + 1 hai lần.
Sau khi làm rõ câu trả lời là: Bạn không có thể. – Debilski
Đó là những gì tôi nghi ngờ. Tôi sẽ đăng nó lên scala-tranh luận. – woky
Vâng, cộng đồng Scala không thực sự có lợi cho việc có thể trực tiếp sửa đổi các tham số chức năng, dù bằng giá trị hay tham chiếu. Lý do cũng giống như lý do tại sao Scala cũng thiếu một cái gì đó khác từ ví dụ của bạn: toán tử '++' đơn nhất cho các kiểu số. Những thứ như vậy có vẻ là một phong cách lập trình không hiệu quả, có chức năng phụ, đó là điều mà Scala thường khuyến khích bạn tránh. Vì nó là viết tắt, nếu bạn muốn liên tục thay đổi một tham số hàm, trước tiên bạn phải lưu nó vào một 'var', điều này làm cho ý định của bạn rõ ràng hơn, dù sao đi nữa! – Destin