2012-01-13 29 views
9

Tôi đã nghe nói sẽ có một cú pháp mới trong DMD 2.058 cho các chức năng ẩn danh, nhưng tôi không thể tìm thấy bất kỳ thông tin nào về nó. Cú pháp mới là gì và cú pháp cũ sẽ không được chấp nhận?Cú pháp lambda mới là gì?

Trả lời

13

Tôi tin rằng nó giống như C#'s.

Sau đây là tương đương:

delegate(i, j) { return i + j; } 
(i, j) => i + j 

như là:

delegate(i) { return i; } 
(i) => i 
i => i // Can leave off parentheses 

như là:

delegate(int i) { return i; } 
(int i) => i 

mặc dù tôi không chắc liệu các loại trở lại rõ ràng cũng được hỗ trợ trong cú pháp mới.

+0

Có vẻ một chút ngớ ngẩn để hỏi, nhưng tôi giả định '(x) => {return x;}' dạng cũng được hỗ trợ? Nghĩa là, sử dụng toán tử với một khối câu lệnh được giới hạn bởi dấu ngoặc nhọn là hợp lệ? – CodexArcanum

+0

@CodexArcanum: Không chắc chắn. – Mehrdad

7

Hiện không có chức năng lambda nào đang được xóa. Nó chỉ là một cú pháp mới, terser đang được giới thiệu cho những ai muốn nó. Là Merhdad says, về cơ bản nó là cú pháp của C#, mặc dù tôi không biết nếu nó giống hệt 100%.

Vì vậy, thay vì làm một cái gì đó giống như

auto found = find!((a){return func(a) == value;})(range); 

bạn làm điều gì đó như

auto found = find!(a => func(a) == value)(range);