Đọc qua F# 4.0 spec, tôi thấy sau đây trên trang 79 của PDF:Tại sao bạn sử dụng Builder.Source() trong trình tạo biểu thức tính toán tùy chỉnh?
Chức năng phụ trợ
src(e)
biểub.Source(e)
nếu ForEach cùng là từ mã người dùng thay vì tạo ra bởi các dịch thuật và một người thợ xâyb
chứa phương thứcSource
. Nếu không,src(e)
biểu thịe
.
Đây là ngữ cảnh của mô tả chi tiết (chi tiết) mô tả cách biểu thức tính toán được phân tích cú pháp và chuyển thành chuỗi cuộc gọi phương thức trên đối tượng trình tạo đối tượng. Scott Wlaschin's Computation Expressions series, mà tôi thấy là vô giá trong việc giúp tôi hiểu phần còn lại của các khái niệm đằng sau biểu thức tính toán, không đề cập đến phương pháp Source
, cũng như bất kỳ tham chiếu nào khác mà tôi có thể tìm thấy. (Google không có nhiều trợ giúp với điều này, vì rất nhiều người nói về mã nguồn và bất kỳ tham chiếu nào đến các phương thức Source
đều bị chôn vùi).
Tôi cũng không thấy Source
được ghi lại ở bất kỳ đâu trong số MSDN page on computation expressions. QueryBuilder class sử dụng Source
, vì vậy tôi có một ví dụ tôi có thể xem xét, nhưng không có giải thích lý do tại sao điều này sẽ hữu ích trong các trường hợp khác.
Trong trường hợp nào bạn muốn có phương thức Source
trên trình tạo biểu thức tính toán tùy chỉnh? Điều gì sẽ là một kịch bản mà việc xử lý mặc định ForEach
là không phù hợp với nhu cầu của một người và phương pháp Source
sẽ hữu ích?
@mydogisbox - Cảm ơn bạn đã liên kết nhưng tôi đã thấy trang đó trước đó. Tôi nhận ra rằng 'Source()' đang được gọi với nội dung của mệnh đề 'in' (tức là' cho mục trong x' tạo ra một lời gọi tới 'Source (x)'). Và tôi hiểu rằng 'Source' sẽ trả lại một cái gì đó phù hợp để đi vào 'For'. Tôi hoàn toàn không thấy * tại sao *. 'QueryBuilder.Source' muốn một IEnumerable hoặc một IQueryable (kế thừa từ IEnumerable), cả hai đều phù hợp với một hàm' For' để lặp lại. Vậy tại sao cuộc gọi 'Source' lại cần ở đây? Tại sao không chỉ nói "Họ đã cho tôi một IEnumerable, vì vậy tôi sẽ lặp qua nó"? – rmunn
Tôi nghĩ rằng chúng tôi đang nói về cùng một điều, tôi chỉ không có đủ chỗ trong một bình luận để giải thích những gì tôi có ý nghĩa. 'For' tôi đang nói đến là' QueryBuilder.Đối với ', được gọi để xử lý biểu thức' for' trong 'truy vấn {** cho ** khách hàng trong db. Khách hàng chọn khách hàng}'. – rmunn