Tôi tiếp tục làm việc trên máy in cho các biểu thức được trích dẫn F #, nó không phải là hoàn hảo, nhưng tôi muốn xem có khả năng. Các mẫu hoạt động trong Microsoft.FSharp.Quotations.Patterns
và Microsoft.FSharp.Quotations.DerivedPatterns
được sử dụng để phân tách các biểu thức được trích dẫn thường sẽ cung cấp MemberInfo
trường hợp khi thích hợp, chúng có thể được sử dụng để lấy tên của thuộc tính, chức năng, v.v ... và loại "tuyên bố", chẳng hạn như mô-đun hoặc lớp tĩnh . Vấn đề là, tôi chỉ biết làm thế nào để có được CompiledName
từ những trường hợp này nhưng tôi muốn tên F #. Ví dụ:Cách lấy tên F # của mô-đun, chức năng, v.v. Từ Khớp biểu thức được trích dẫn
> <@ List.mapi (fun i j -> i+j) [1;2;3] @> |> (function Call(_,mi,_) -> mi.DeclaringType.Name, mi.Name);;
val it : string * string = ("ListModule", "MapIndexed")
Cách khớp này có thể viết lại để trả lại ("List", "mapi")
? Có thể không?
FYI, đây là giải pháp của tôi thức đánh bóng từ Stringer Bell và giúp đỡ pblasucci của:
let moduleSourceName (declaringType:Type) =
FSharpEntity.FromType(declaringType).DisplayName
let methodSourceName (mi:MemberInfo) =
mi.GetCustomAttributes(true)
|> Array.tryPick
(function
| :? CompilationSourceNameAttribute as csna -> Some(csna)
| _ -> None)
|> (function | Some(csna) -> csna.SourceName | None -> mi.Name)
//usage:
let sourceNames =
<@ List.mapi (fun i j -> i+j) [1;2;3] @>
|> (function Call(_,mi,_) -> mi.DeclaringType |> moduleSourceName, mi |> methodSourceName);
Tôi khá chắc chắn rằng bạn có thể kiểm tra các thuộc tính tùy chỉnh của một phương pháp cho 'CompilationSourceNameAttribute'; thuộc tính 'SourceName' của nó phải là thứ bạn muốn. Tôi muốn đăng một câu trả lời với một mẫu thích hợp, nhưng tôi không ở gần một máy tính phát triển vào lúc này. – pblasucci
Cảm ơn bạn đã chia sẻ! Bạn cũng có thể đăng nó lên http://fssnip.net của Tomas: D – Stringer
@Stringer Bell - nghĩ rằng bạn có thể quan tâm, tôi đã bắt đầu một dự án mã nguồn mở Unquote (http://code.google.com/p/unquote /) mà kết hợp một máy in báo giá, mà tôi nói về cụ thể hơn ở đây: http://stackoverflow.com/questions/1448961/is-there-any-built-in-function-for-human-readable-f-quotations/ 4948660 # 4948660 –