2014-09-16 22 views
5

Hãy xem xét các mẫu sau:D: không mong muốn chức năng ẩn danh thuộc tính

mixin template test(void function() callback) 
{ 
    static this() 
    { 
     callback(); 
    } 
} 

này hoạt động:

mixin test!(&sort_arr); 
void sort_arr() 
{ 
    arr.sort; 
} 

Tuy nhiên điều này không làm việc:

mixin test!({ arr.sort; }); 

DMD cung cấp cho các lỗi sau :

Error: safe function 'main.__lambda6' cannot call system function '_adSort' 
Error: @nogc function 'main.__lambda6' cannot call [email protected] function '_adSort' 

Dường như với tôi rằng phiên bản lambda được phỏng đoán là safe @nogc, trong khi không rõ ràng sort_arr.

Làm cách nào để khắc phục điều này và chuyển một mẫu lambda ẩn danh tới mẫu này?


Edit: báo cáo lỗi nộp theo sự giới thiệu trong câu trả lời được chấp nhận: https://issues.dlang.org/show_bug.cgi?id=13481

Trả lời

3

Tôi nghĩ rằng đây là một lỗi với suy luận thuộc tính từ built-in tài sản. Bạn có thể báo cáo tại bộ theo dõi vấn đề của D, tại http://issues.dlang.org/.

Tuy nhiên, xin lưu ý rằng thuộc tính/chức năng được xây dựng trong .sort đang trên đường không được dùng nữa. Thay vào đó, hãy sử dụng std.algorithm.sort, không nên có sự cố này.

+0

Tôi đang nhắm vào 'std.algorithm.sort', tôi không nhận ra có tích hợp sẵn ... –

+0

Để làm rõ, bạn cần nhập' std.algorithm' và làm 'arr.sort () 'thay vì' arr.sort'. Điều này là vì lý do lịch sử và sẽ không cần thiết sau khi sắp xếp được sắp xếp đúng cách. – Meta

Các vấn đề liên quan