2012-03-03 49 views

Trả lời

13

Thật không may, bạn không thể chuyển loại dưới dạng tham số tĩnh cho nhà cung cấp loại. Các tham số tĩnh được truyền bằng cách sử dụng MyProvider< "first argument", 42 > phải là các kiểu nguyên thủy (như string, int và tương tự). Tôi không thấy danh sách ở bất kỳ nơi nào trong tài liệu, nhưng Type chắc chắn không được hỗ trợ.

Vấn đề với việc này là bạn có thể vượt qua nó typeof<MyType> trong đó MyType được khai báo trong cùng một tệp với tệp đang sử dụng nhà cung cấp loại và do đó trình biên dịch F # sẽ phải biên dịch phần đầu tiên của tệp sau đó gọi nhà cung cấp và sau đó tiếp tục. Điều này nghe có vẻ, nhưng nó có lẽ là ưu tiên thấp cho đội F #.

Cách tốt nhất để vượt qua thông tin về loại sang nhà cung cấp loại là để cung cấp cho nó một cái tên loại và sau đó tra cứu các loại sử dụng phản chiếu (điều này sẽ chỉ làm việc nếu loại là từ một assembly đã được biên soạn):

type MyTest = MyTypeProvider<"System.Int32"> 
+0

Làm cho tinh thần. Đó là lý do tại sao, theo quan điểm của tôi, chúng ta cần khái niệm về mức độ thi hành. Akin đến một biểu thức tính toán, có thể nạp môi trường chính với các loại, mà không ressorting để DLL bên ngoài, và có mã được thực hiện trước khi các cấp thực hiện cao hơn. – nicolas

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