Vâng, điều này đúng, nếu tuyên bố cuối cùng của lambda là biểu thức, nó được coi là giá trị trả về của nó.
Dưới đây là what the reference says (nhờ @KirillRakhman):
Chúng tôi có thể trở lại một cách rõ ràng giá trị từ lambda sử dụng cú pháp qualified return. Nếu không, giá trị của biểu thức cuối cùng sẽ được trả về. Do đó, hai đoạn sau là tương đương:
ints.filter {
val shouldFilter = it > 0
shouldFilter
}
ints.filter {
val shouldFilter = it > 0
[email protected] shouldFilter
}
Ngữ nghĩa tuyên bố cuối cùng cũng đúng đối với if
(that's why there's no ternary operator), when
và try
-catch
khối, và các báo cáo này là những biểu hiện bản thân:
val foo = if (bar) {
doSomething()
baz
} else {
doSomethingElse()
qux
}
Xem thêm: examples for when
and try
-catch
.
Vì vậy, lambdas nhất quán với cấu trúc ngôn ngữ theo khía cạnh này.
Nếu bạn muốn thực hiện một return
tuyên bố rõ ràng trong một lambda, sử dụng [email protected]
syntax (còn, another answer with examples). Không gắn nhãn return
, ngược lại, làm việc với fun
gần nhất (bỏ qua lambdas) và do đó chỉ có thể xảy ra trong các lambda đó là inlined.
Có một số language proposal để thêm cú pháp đặc biệt cho phát ra giá trị từ khối mã nhưng bị từ chối.
Chỉ cần gợi ý hữu ích, bạn có thể rút ngắn thành 'val numsPlusOne = nums.map {it + 1}' (vì 'nó' được ngụ ý nếu không được chỉ định và nếu' it + 1' là dòng cuối cùng, kết quả sẽ được trả về khi @hotkey giải thích) –