2016-09-01 12 views
11

Tôi yêu các tính năng phá hoại của Kotlin, chúng giúp tôi giải mã và tập trung vào thiết yếu.Chỉ định lại các biến thông qua Destructuring

Tôi gặp phải một trường hợp mà tôi không thể tìm ra cú pháp chính xác, làm cách nào tôi có thể gán lại các biến thông qua phá hủy?

var (start, end) = startEndDate(198502) 

// intellij neither accept this ... 
start, end = startEndDate(200137) 

// ... nor this 
(start, end) = startEndDate(200137) 

Trả lời

9

Từ quan điểm ngôn ngữ, các biến khai báo trong khai báo mở là các biến độc lập chỉ riêng biệt, và vào lúc này Kotlin không cung cấp một cách để gán nhiều biến trong một tuyên bố duy nhất.

Bạn chỉ có thể destructure biểu hiện của bạn một lần nữa và gán một biến bởi một:

var (start, end) = startEndDate(198502) 

val (newStart, newEnd) = startEndDate(200137) 
start = newStart 
end = newEnd 

Nếu bạn cần để chứng minh rằng hai biến này có có một số ý nghĩa đặc biệt và nên được chỉ định cùng nhau, bạn có thể khai báo hàm cục bộ gán lại cho họ như sau:

var (start, end) = startEndDate(198502) 
fun setStartEnd(pair: Pair<SomeType, SomeType>) { start = pair.first; end = pair.second } 

setStartEnd(startEndDate(200137)) 
+8

Hoặc bạn có thể dùng 'with':' with (startEndDate (200137)) {start = first; end = second} '. – mfulton26

+0

@ mfulton26: bạn có thể xây dựng 'với' không? làm thế nào chúng ta có thể sử dụng với ở đây như là thay thế? – Kushal

+1

@Kushal, nếu bạn có một số biến mà bạn đã gán thông qua hủy và muốn gán lại chúng thì bạn có thể sử dụng 'with' để gán lại chúng dễ dàng hơn. ví dụ. 'with (startEndDate (200137)) {start = first; end = second} 'thay vì' var tmpDate = startEndDate (200137); start = tmpDate.first; end = tmpDate.second', 'var tmpDate = startEndDate (200137); start = tmpDate.startDate; end = tmpDate.endDate', v.v. (tùy thuộc vào kiểu trả về 'startEndDate'). – mfulton26

Các vấn đề liên quan