Phần sau định nghĩa một hàm chấp nhận hàm và chỉ định giá trị mặc định cho hàm được truyền nếu không có hàm nào được cung cấp.
fun foobar(fn: (a: Int, b: Int) -> Int = { a: Int, b: Int -> if (a > b) a else b }) {
println(fn(42, 99))
}
Bạn có thể vượt qua các chức năng của riêng bạn:
val min = { a: Int, b: Int -> if (a <= b) a else b }
foobar(min)
val max = { a: Int, b: Int -> if (a > b) a else b }
foobar(max)
Bạn có thể bỏ qua các chức năng và sử dụng mặc định:
foobar()
Hoặc bạn có thể tham khảo các tiêu chuẩn thư viện maxOf
chức năng như mặc định, thay vì viết của riêng bạn:
fun foobar(fn: (a: Int, b: Int) -> Int = ::maxOf) {
println(fn(42, 99))
}
Nguồn
2017-07-04 09:28:08
Bạn muốn truyền lambda này cho ai? – zsmb13
Lưu ý phụ, đã có hàm 'max' có sẵn trong JDK, có thể truy cập thông qua' Math.max (a, b) 'làm điều tương tự. – Robin
Về câu hỏi của bạn mặc dù, tôi không thực sự hiểu những gì bạn đang yêu cầu - bạn có thể vượt qua 'max' như một đối số bình thường cho bất kỳ cuộc gọi chức năng mà có một chức năng của các hình thức' (Int, Int) -> Int'. – Robin