- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Người ta thường sử dụng các khối mã với switch hoặc if khi kiểm tra các sự kiện. Nó có thể là mã sạch nếu được làm đơn giản hơn, nhưng dường như nó vẫn có nhiều dòng hơn mức cần thiết và có thể được đơn giản hóa bằng cách sử dụng lambdas.
Sử dụng if để chặn:
if(hành động == ACTION_1){
doAction1();
} else if(action == ACTION_2){
doAction2();
} khác {
doDefaultAction();
}
Chặn bằng công tắc:
chuyển đổi (hành động) {
trường hợp ACTION_1:
doAction1();
phá vỡ;
trường hợp ACTION_2:
doAction2();
phá vỡ;
default:
doDefaultAction();
}
Sử dụng lớp tiện ích bên dưới Với
Sử dụng lambda để chặn:
với (hành động)
.when(ACTION_1, this::doAction1)
.when(ACTION_2, this::doAction2)
.byDefault(this::doDefaultAction)
Sử dụng lambdas ít mã hơn, nhưng câu hỏi đặt ra là: nó có dễ đọc hơn những cái khác không? Dễ bảo trì hơn? Về hiệu suất, lambdas là kém nhất, nhưng đối với những trường hợp hiệu suất không quan trọng, các phiên bản lambdas ngắn hơn khối switch/if.
Vì vậy, bạn nghĩ gì? Có lẽ có một cách Kotlin ngắn hơn thế này, tôi đã cố gắng chỉ tập trung vào Java, tôi thích Kotlin nhưng quá trình biên dịch vẫn quá chậm đối với dự án của tôi.
Các lớp tiện ích tương tự có thể được sử dụng khi một khối phải trả về một giá trị cụ thể.
Cho tôi biết, lớp của lambda ở đây, tôi không kiểm tra lỗi, chỉ làm nhanh cho ví dụ này:
lớp công khai Với {
id cuối cùng riêng tư;
hành động boolean riêng tưFound;
riêng tư Với(T id) {
this.id = id;
}
tĩnh công khai Với với (T id) {
trả về mới Với<>(id);
}
công khai With when(T ExpectId, Hành động hành động) {
if (!actionFound && id == ExpectId) {
actionFound = true;
hành động.execute();
}
return this;
}
public void byDefault(Hành động hành động) {
if (!actionFound) {
hành động.execute();
}
}
@FunctionalInterface
giao diện Hành động {
vô hiệu thực thi();
}
}
câu trả lời hay nhất
Như một cặp vợ chồng đã nói, hãy thay thế công tắc
Ít hiệu quả hơn. Tùy thuộc vào trường hợp sử dụng của bạn, việc triển khai của bạn thậm chí có thể có giá trị.
Điều thú vị là Oracle thực sự có kế hoạch công tắc
Triển khai lambda trong câu lệnh, chẳng hạn như JEP gần đây này hiển thị trong . .
例子:
Chuỗi được định dạng = switch (s) {
trường hợp null -> "(null)";
trường hợp "" -> "(trống)";
mặc định->s;
}
Giới thiệu về Java: Thay thế switch bằng lambda. đáng giá? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/48585248/
Các cặp có thứ tự có thể được tạo bằng cách sử dụng lambda và các hàm (một nhược điểm trong Lisp), như được minh họa trong phần Sử dụng lambda cho định nghĩa cons/car/cdr trong SICP. Nó cũng hoạt động với Python
Tôi đang cố gắng gọi một lambda AWS từ một lambda khác và thực hiện chuỗi lambda. Lý do cho điều này là AWS không cung cấp nhiều trình kích hoạt từ cùng một nhóm S3. Tôi đã tạo lambda bằng trình kích hoạt s3. Đầu tiên
Dựa trên mã nguồn sau đây, có vẻ như lambda thông thường có thể thay thế được với lambda mở rộng. fun main(args: Array) { val số = listOf(1, 2, 3) f
Hướng dẫn Giới thiệu về Phép tính Lambda Bài viết này giới thiệu hàm nhân Phép nhân hai số x và y ca
Tôi đang cố gắng tìm ra cách vẽ cây cú pháp cho biểu thức sau. Đầu tiên, điều này biểu hiện chính xác như thế nào? Có vẻ như nó lấy 1 và 2 làm tham số và nếu n bằng 0, nó sẽ chỉ trả về m. Ngoài ra, ai đó có thể chỉ ra phần đầu của cây phân tích hoặc một ví dụ không? Tôi chưa thể tìm thấy một. câu trả lời hay nhất
Trong C++ 0x, tôi muốn biết loại hàm lambda là gì. Cụ thể: #include type1 foo(int x){ return [x](int y)->int{return x * y
Tôi đã thấy câu hỏi này trên một trong những tin tuyển dụng, nó hỏi hàm lambda là gì và nó liên quan như thế nào đến các hàm bậc cao hơn. Tôi đã biết cách sử dụng các hàm lambda nhưng không quá tự tin khi giải thích nó, vì vậy tôi đã tra cứu trên Google một chút và tìm thấy điều này: Cái gì
Thật khó để nói những gì đang được hỏi ở đây. Câu hỏi mơ hồ, mơ hồ, không đầy đủ, quá rộng hoặc hùng biện và không thể trả lời hợp lý ở dạng hiện tại. Để được trợ giúp làm rõ vấn đề này để bạn có thể mở lại, hãy truy cập trung tâm trợ giúp. Đã đóng
Đánh giá (((lambda(xy) (lambda (x) (* xy))) 5 6) 10) trong Đề án Tôi thực sự không biết cách thực hiện!
Tôi đang làm việc với một tập hợp các phiên bản của MyCustomType như sau: fun runAll(vararg command: MyCustomType){ command.forEach { it.myM
Tiền đề của Brian trong lập luận của ông cho câu hỏi "Tác dụng phụ có phải là điều tốt không?" thật thú vị: máy tính là cỗ máy von-Neumann.
Trong Common Lisp, nếu tôi muốn hai hàm chia sẻ trạng thái, tôi sẽ bỏ qua lambda như thế này: (let ((state 1)) (defun inc-state () (in
Đánh giá (((lambda(xy) (lambda (x) (* xy))) 5 6) 10) trong Đề án Tôi thực sự không biết cách thực hiện!
Như wiki phép tính lambda nói: Có một số cách có thể để xác định các số tự nhiên trong lambda cal
Tôi có một lớp dữ liệu và tôi cần khởi tạo một số Danh sách. Tôi cần lấy giá trị của JsonArray (Tôi đang sử dụng Gson). Tôi đã thực hiện chức năng này: Private fun arrayToList(data: JsonAr
Có một cách viết tắt nào trong sơ đồ cho ((lambda() )) Ví dụ: thay vì ((lambda() (define x 1) (display x))) tôi muốn có thể làm một cái gì đó như (empty-lam
Tôi có phương thức sau trong thư viện Java: public void setColumnComparator(final int columIndex, Final Comparator colu
Tôi đang nghiên cứu một hàm để tính toán các bước di chuyển hiệu quả của các quân cờ trong một ván cờ vua. Chức năng cầm đồ trắng hoạt động. Khi tôi cố gắng khái quát hóa điều này cho nước đi cầm đồ của một trong hai người chơi, tôi đã gặp phải một lệnh gọi hàm bất hợp pháp. Tôi đã thay thế rồi
Hãy xem xét mã này (được biên dịch trên GCC và MSVC): int main() { auto foo = [](auto p){ typedef decltype(p) p_t;
Tôi đang đọc một đoạn mã sử dụng lambda bên trong lambda và tôi muốn kiểm tra nó bằng cách tạo một hàm giả đọc từ một tệp rồi trả về số tối đa và tối thiểu. Đây là những gì tôi nghĩ ra dummy = đường dẫn lambda
Tôi là một lập trình viên xuất sắc, rất giỏi!