Theo như tôi được biết, không có cách nào trong Scala có nhiều điểm trở lại trong một chức năng ẩn danh, ví dụ:Nhiều điểm trở lại trong scala đóng/chức năng ẩn danh
someList.map((i) => {
if (i%2 == 0) return i // the early return allows me to avoid the else clause
doMoreStuffAndReturnSomething(i) // thing of this being a few more ifs and returns
})
đặt ra một error: return outside method definition
. (Và nếu nó không được huy động đó, mã sẽ không làm việc như tôi muốn nó để làm việc.)
Một workaround tôi có thể điều của sẽ là sau
someList.map({
def f(i: Int):Int = {
if (i%2 == 0) return i
doMoreStuffAndReturnSomething(i)
}
f
})
tuy nhiên, tôi Tôi muốn biết nếu có một cách khác được chấp nhận để làm điều này. Có lẽ một khả năng để đi mà không có một tên cho chức năng bên trong?
(Một trường hợp sử dụng sẽ bắt chước một số giá trị continue
cấu trúc bên trong vòng lặp.)
Sửa
Hãy tin tôi, rằng có một nhu cầu để tránh những tuyên bố khác, bởi vì, các doMoreStuff
phần thực sự có thể trông giống như:
val j = someCalculation(i)
if (j == 0) return 8
val k = needForRecalculation(i)
if (k == j) return 9
finalRecalc(i)
...
đó, khi bạn chỉ có một if
- Cơ cấu else
sẵn được e lộn xộn.
Tất nhiên, trong ví dụ đơn giản tôi đã đưa ra ở đầu, nó dễ dàng hơn để chỉ sử dụng else
. Xin lỗi, tôi nghĩ điều này rõ ràng.
Sự cố khi sử dụng câu lệnh khác là gì? – Patrick
Trong ví dụ bạn đưa ra không có lý do gì cả để tránh từ khóa 'else'; không có biểu thức bổ sung nào được đánh giá nếu bạn sử dụng 'else', vì vậy bạn không có gì bằng cách sử dụng trả lại sớm ở đây. – Jesper
Xin lỗi, tôi đã sửa đổi nó. Nghĩ rằng rõ ràng phần 'doMoreStuff' thực sự * làm * nhiều hơn một chút. – Debilski