F# API Search Engine เป็นเครื่องมือค้นหาที่ช่วยให้คุณสามารถค้นหา F# API ด้วยลายเซ็นหรือชื่อ
ชื่อโครงการ | ภาพรวม |
---|---|
FSharpApiSearch | เนื้อหาของเครื่องมือค้นหา |
FSharpApiSearch.ฐานข้อมูล | เครื่องมือสร้างฐานข้อมูลเครื่องมือค้นหา |
FSharpApiSearch.Console | ส่วนหน้าของเครื่องมือค้นหา (แอปพลิเคชันคอนโซล) |
ดาวน์โหลดไฟล์ zip จากหน้าเผยแพร่และแตกไฟล์
ขั้นแรก ให้รัน FSharpApiSearch.Database.exe เพื่อสร้างฐานข้อมูล
FSharpApiSearch.Database.exe
แอสเซมบลีที่สามารถค้นหาตามค่าเริ่มต้นคือ FSharp.Core
, mscorlib
, System
และ System.Core
คุณสามารถเพิ่มเป้าหมายการค้นหาได้โดยการระบุแอสเซมบลีเมื่อสร้างฐานข้อมูล คุณสามารถระบุไดเร็กทอรีเพื่อค้นหาแอสเซมบลีด้วยตัวเลือก --lib
โปรดระบุชุดประกอบที่ชุดประกอบที่ระบุขึ้นอยู่กับ
FSharpApiSearch.Database.exe --lib:TargetAssemblyDirectory TargetAssembly1 TargetAssembly2 DependentAssembly
หากคุณเรียกใช้ FSharpApiSearch.Console.exe โดยไม่ได้ให้การสืบค้น FSharpApiSearch.Console.exe จะเริ่มทำงานในโหมดโต้ตอบ พิมพ์ #q
เพื่อออกจากโหมดโต้ตอบ
FSharpApiSearch.Console.exe
หากคุณส่งข้อความค้นหาเป็นอาร์กิวเมนต์ การค้นหาจะดำเนินการเพียงครั้งเดียว
FSharpApiSearch.Console.exe "int -> int"
ใช้ตัวเลือก --target
เพื่อใช้ฐานข้อมูลที่สร้างขึ้นสำหรับการค้นหา
FSharpApiSearch.Console.exe --target:TargetAssembly1 --target:TargetAssembly2
หากคุณใช้อ็อพชัน --target
ค่าเริ่มต้น FSharp.Core
, mscorlib
, System
และ System.Core
จะไม่รวมอยู่ในเป้าหมายการค้นหา ดังนั้น หากคุณต้องการรวมไว้ในเป้าหมายการค้นหา ให้ระบุอย่างชัดเจน
FSharpApiSearch.Console.exe --target:TargetAssembly1 --target:TargetAssembly2 --target:FSharp.Core --target:mscorlib --target:System --target:System.Core
respect-name-difference
หากเปิดใช้งานตัวเลือก respect-name-difference
การค้นหาจะเคารพความแตกต่างในชื่อของตัวแปรประเภทต่างๆ และสัญลักษณ์ตัวแทนที่มีชื่อในแบบสอบถาม ชื่อที่แตกต่างกันไม่ตรงกับประเภทเดียวกัน ตัวอย่างเช่น แบบสอบถาม ?a -> ?a
ตรงกับลายเซ็นต์ int -> int
แต่แบบสอบถาม ?a -> ?b
ไม่ตรงกับ int -> int
หากปิดใช้งานตัวเลือกนี้ ข้อความค้นหา ?a -> ?b
จะตรงกับ int -> int
greedy-matching
หากเปิดใช้งานตัวเลือก greedy-matching
ตัวแปรประเภทและประเภทอื่นๆ จะถูกจับคู่ทีละรายการ และผลลัพธ์จะถูกจัดเรียงและแสดงตามลำดับการจับคู่จากมากไปหาน้อย นอกจากนี้ ข้อจำกัดด้านประเภทยังถูกนำมาพิจารณาในการค้นหาอีกด้วย
ignore-param-style
รูปแบบอาร์กิวเมนต์สำหรับฟังก์ชันและวิธีการมีสองประเภท: รูปแบบ curried ( arg1 -> arg2 -> returnType
) และรูปแบบ tuple ( arg1 * arg2 -> returnType
) หากเปิดใช้งานตัวเลือก ignore-param-style
การจับคู่จะละเว้นรูปแบบ Curried และทูเพิล
ignore-case
หากเปิดใช้งานตัวเลือก ignore-case
ตัวพิมพ์จะถูกละเว้นเมื่อจับคู่ชื่อ API และชื่อประเภท
substring
หากเปิดใช้งานตัวเลือก substring
ให้ค้นหาตามสตริงย่อย
swap-order
หากเปิดใช้งานตัว swap-order
การค้นหาจะสลับลำดับของอาร์กิวเมนต์และทูเพิล ตัวอย่างเช่น ข้อความค้นหา a -> b -> c
ตรงกับ b -> a -> c
complement
หากเปิดใช้งานตัว complement
ให้ดำเนินการและค้นหาอาร์กิวเมนต์และองค์ประกอบทูเพิลที่หายไป ตัวอย่างเช่น ข้อความค้นหา a * c
ตรงกับ a * b * c
single-letter-as-variable
หากเปิดใช้งานตัวเลือก single-letter-as-variable
ชื่อประเภทตัวอักษรเดี่ยวจะถือเป็นชื่อตัวแปรประเภท ตัวอย่างเช่น ข้อความค้นหา t list
จะเหมือนกับ 't list
language
สลับการสืบค้น การค้นหา และการแสดงผลลัพธ์เป็นภาษาการเขียนโปรแกรมที่ระบุโดยตัวเลือก language
ตัวเลือกนี้ยอมรับ F# และ C#
xmldoc
หากเปิดใช้งานตัวเลือก xmldoc
จะแสดงเอกสาร XML ในผลลัพธ์การค้นหา
โดยพื้นฐานแล้วข้อความค้นหา F# นั้นเหมือนกับลายเซ็น F# จะมีการอธิบายรายละเอียดเฉพาะส่วนขยายของ FSharpApiSearch เท่านั้น
>
เป็นพรอมต์เมื่อคุณเริ่ม FSharpApiSearch.Console.exe ในโหมดโต้ตอบ
เอพีไอ | ตัวอย่างแบบสอบถาม |
---|---|
ฟังก์ชันและค่าของโมดูล | int -> string |
บันทึกฟิลด์โครงสร้าง | Ref<'a> -> 'a |
สหภาพที่เลือกปฏิบัติ | 'a -> Option<'a> |
สมาชิก | 'a list -> int |
ตัวสร้าง | Uri : _ Uri.new : _ Uri..ctor : _ |
ชื่อ (ชื่อฟังก์ชัน ชื่อสมาชิก ฯลฯ) | head : 'a list -> 'a head |
รูปแบบที่ใช้งานอยู่ | (||) : ... -> Expr -> ? |
ประเภท, ประเภทคำย่อ, โมดูล | List<'T> |
นิพจน์การคำนวณ | { let! } : Async<'T> |
การค้นหาประเภทย่อย | #seq<'a> -> 'a |
หากต้องการค้นหาตามชื่อ ให้เขียน name : signature
หรือ name
หากคุณไม่ได้ระบุลายเซ็น ให้ระบุ _
ในส่วนของลายเซ็น
> id : 'a -> 'a
Microsoft.FSharp.Core.Operators.id: 'T -> 'T, module value, FSharp.Core
> choose
Microsoft.FSharp.Collections.Array.Parallel.choose: ('T -> option<'U>) -> 'T[] -> 'U[], module value, FSharp.Core
Microsoft.FSharp.Collections.Array.choose: ('T -> option<'U>) -> 'T[] -> 'U[], module value, FSharp.Core
Microsoft.FSharp.Collections.List.choose: ('T -> option<'U>) -> list<'T> -> list<'U>, module value, FSharp.Core
Microsoft.FSharp.Collections.Seq.choose: ('T -> option<'U>) -> seq<'T> -> seq<'U>, module value, FSharp.Core
Microsoft.FSharp.Control.Event.choose: ('T -> option<'U>) -> IEvent<'Del, 'T> -> IEvent<'U>, module value, FSharp.Core
when 'Del : delegate and 'Del :> Delegate
Microsoft.FSharp.Control.Observable.choose: ('T -> option<'U>) -> IObservable<'T> -> IObservable<'U>, module value, FSharp.Core
> choose : _
Microsoft.FSharp.Collections.Array.Parallel.choose: ('T -> option<'U>) -> 'T[] -> 'U[], module value, FSharp.Core
Microsoft.FSharp.Collections.Array.choose: ('T -> option<'U>) -> 'T[] -> 'U[], module value, FSharp.Core
Microsoft.FSharp.Collections.List.choose: ('T -> option<'U>) -> list<'T> -> list<'U>, module value, FSharp.Core
Microsoft.FSharp.Collections.Seq.choose: ('T -> option<'U>) -> seq<'T> -> seq<'U>, module value, FSharp.Core
Microsoft.FSharp.Control.Event.choose: ('T -> option<'U>) -> IEvent<'Del, 'T> -> IEvent<'U>, module value, FSharp.Core
when 'Del : delegate and 'Del :> Delegate
Microsoft.FSharp.Control.Observable.choose: ('T -> option<'U>) -> IObservable<'T> -> IObservable<'U>, module value, FSharp.Core
ใช้เครื่องหมายดอกจัน ( *
) เพื่อค้นหารายการที่ตรงกันบางส่วน ตัวอย่างเช่น FSharp.Core.String.* : _
แสดง API ทั้งหมดของโมดูล FSharp.Core.String
> FSharp.Core.String.* : _
Microsoft.FSharp.Core.String.collect: (char -> string) -> string -> string, module value, FSharp.Core
Microsoft.FSharp.Core.String.concat: string -> seq<string> -> string, module value, FSharp.Core
Microsoft.FSharp.Core.String.exists: (char -> bool) -> string -> bool, module value, FSharp.Core
Microsoft.FSharp.Core.String.filter: (char -> bool) -> string -> string, module value, FSharp.Core
...
โดยปกติแล้ว ตัวแปรประเภทเช่น 'a
และชื่อประเภทเช่น int
จะไม่ตรงกัน อย่างไรก็ตาม คุณอาจต้องการค้นหาทั้งสองกรณีพร้อมกัน ในกรณีเช่นนี้ คุณสามารถใช้ไวด์การ์ด ?
หรือ _
> ? -> list<?> -> ?
Microsoft.FSharp.Collections.List.append: list<'T> -> list<'T> -> list<'T>, module value, FSharp.Core
Microsoft.FSharp.Collections.List.averageBy: ('T -> 'U) -> list<'T> -> 'U, module value, FSharp.Core
when 'U : (static member op_Addition : 'U * 'U -> 'U) and 'U : (static member DivideByInt : 'U * int -> 'U) and 'U : (static member get_Zero : unit -> 'U)
Microsoft.FSharp.Collections.List.choose: ('T -> option<'U>) -> list<'T> -> list<'U>, module value, FSharp.Core
Microsoft.FSharp.Collections.List.chunkBySize: int -> list<'T> -> list<list<'T>>, module value, FSharp.Core
...
นอกจากนี้ ด้วยการตั้งชื่อไวด์การ์ด คุณสามารถเพิ่มเงื่อนไขว่าชื่อประเภทเดียวกันจะปรากฏในตำแหน่งไวด์การ์ดที่มีชื่อเดียวกัน ตัวอย่างเช่น ? -> ?
ตรงกับฟังก์ชันต่อไปนี้ทั้งหมด:
'a -> 'a
int -> int
'a -> int
int -> string
อย่างไรก็ตาม หากคุณตั้งชื่อเป็น ?a -> ?a
ตัวอย่างด้านบนจะไม่ตรงกับ 'a -> int
หรือ int -> string
การค้นหาประเภทย่อยเป็นข้อจำกัดที่ระบุประเภทที่เข้ากันได้กับประเภทพื้นฐานหรืออินเทอร์เฟซที่ระบุ
หากต้องการใช้การค้นหาประเภทย่อยในการสืบค้น ให้เขียน #type
คุณสามารถระบุชื่อประเภทและชื่ออินเทอร์เฟซในส่วน type
ได้ ไม่สามารถระบุพารามิเตอร์ประเภทและไวด์การ์ดในชื่อประเภทได้
ตัวอย่างเช่น ? -> #seq<'T>
สามารถค้นหาฟังก์ชันที่สืบทอดมาจาก seq<'T>
ประเภทการส่งคืน เช่น List<'T>
, IList<'T>
และ 'T[]
หากต้องการค้นหาสมาชิกอินสแตนซ์ ให้เขียน receiver -> signature
เมื่อค้นหาเมธอด ให้เขียน receiver -> arg -> returnType
หากต้องการค้นหาเมธอดที่มีหลายอาร์กิวเมนต์ ให้เขียน receiver -> arg1 -> arg2 -> returnType
หรือ receiver -> arg1 * arg2 -> returnType
โดยปกติ อาร์กิวเมนต์ของเมธอดจะถูกค้นหาโดยไม่แยกความแตกต่างระหว่างรูปแบบทูเพิล ( arg1 * arg2
) และรูปแบบ Curried ( arg1 -> arg2
) หากคุณต้องการค้นหาตามรูปแบบอาร์กิวเมนต์ ให้ปิดใช้งานตัวเลือก ignore-param-style
หากต้องการค้นหาคุณสมบัติ ให้เขียน receiver -> propertyType
คุณสมบัติที่จัดทำดัชนีจะถูกเขียนเป็น receiver -> index -> propertyType
สมาชิกแบบคงที่สามารถค้นหาได้โดยใช้ข้อความค้นหาเดียวกันกับค่าและฟังก์ชันในโมดูล วิธีการหลายอาร์กิวเมนต์ถูกเขียนเหมือนวิธีการอินสแตนซ์ arg1 -> arg2 -> returnType
หรือ arg1 * arg2 -> returnType
หากต้องการค้นหารูปแบบที่ใช้งานอยู่ ให้เขียน (||) : (args ->) inputType -> returnType
หากต้องการค้นหารูปแบบที่ใช้งานบางส่วน ให้เขียน (|_|) : (args ->) inputType -> returnType
ในส่วน inputType
ให้ระบุประเภทที่จัดการโดยรูปแบบที่ใช้งานอยู่ ตัวอย่างเช่น หากคุณต้องการค้นหารูปแบบที่ใช้งานอยู่สำหรับ Expr
ให้เขียน (||) : ... -> Expr -> ?
ระบุอาร์กิวเมนต์รูปแบบที่ใช้งานอยู่ใน args
หากคุณต้องการค้นหารูปแบบที่ใช้งานอยู่ด้วยอาร์กิวเมนต์ ให้เขียน (||) : arg1 -> arg2 -> inputType -> returnType
หากคุณต้องการค้นหารูปแบบที่ใช้งานอยู่โดยไม่มีข้อโต้แย้ง ให้เขียน (||) : inputType -> returnType
หากคุณต้องการค้นหาโดยไม่แยกความแตกต่างระหว่างการมีหรือไม่มีอาร์กิวเมนต์ ให้ใช้คีย์เวิร์ด ...
ในส่วนอาร์กิวเมนต์แล้วเขียน (||) : ... -> inputType -> returnType
ส่วน retyrnType
ระบุประเภทที่ส่งคืนโดยฟังก์ชัน ซึ่งเป็นรูปแบบที่ใช้งานจริง ค่าที่ส่งคืนของฟังก์ชันรูปแบบที่ใช้งานอยู่จะแตกต่างกันสำหรับรูปแบบเดี่ยว หลายรูปแบบ และรูปแบบที่ใช้งานบางส่วน โปรดระบุประเภทที่เกี่ยวข้อง, option<_>
, Choice<_,...,_>
โดยปกติจะแนะนำให้ใช้ไวด์การ์ด ( ?
)
หากต้องการค้นหานิพจน์การคำนวณ ให้เขียน { syntax } : type
ค้นหาตัวสร้างที่สามารถจัดการไวยากรณ์และประเภทที่ระบุ
try/with
if/then
ระบุชื่อการ while
การที่กำหนดเองใน syntax
: let!
, yield
, return
yield!
try/finally
return!
for
use
use!
หากคุณต้องการระบุหลาย syntax
ให้คั่นด้วย ;
และเขียน { s1; s2 } : type
แบบสอบถาม C# มีไวยากรณ์ที่แตกต่างจากลายเซ็น C#
เอพีไอ | ตัวอย่างแบบสอบถาม |
---|---|
สมาชิก | object -> () -> string string -> int |
ตัวสร้าง | Uri : _ Uri..ctor : _ |
พารามิเตอร์ประเภท | List<T> -> int Dictionary<tkey, tvalue> <TKey, TValue> : Dictionary<TKey, TValue> |
ชื่อ (ชื่อสมาชิก ฯลฯ) | Length : string -> int Length |
แม่พิมพ์ | List |
การค้นหาประเภทย่อย | <T> : #IEnumerable<T> -> T |
หากต้องการค้นหาสมาชิกหรือพิมพ์ตามชื่อ ให้เขียน name : signature
หรือ name
หากคุณไม่ได้ระบุลายเซ็น ให้ระบุ _
ในส่วนของลายเซ็น
> Length : string -> int
System.String.Length : int, instance property with get, mscorlib
> Length
int Array.Length { get; }, instance property, mscorlib
int BitArray.Length { get; set; }, instance property, mscorlib
long BufferedStream.Length { get; }, instance property, mscorlib
long FileInfo.Length { get; }, instance property, mscorlib
...
> Length : _
int Array.Length { get; }, instance property, mscorlib
int BitArray.Length { get; set; }, instance property, mscorlib
long BufferedStream.Length { get; }, instance property, mscorlib
long FileInfo.Length { get; }, instance property, mscorlib
...
ใช้เครื่องหมายดอกจัน ( *
) เพื่อค้นหารายการที่ตรงกันบางส่วน ตัวอย่างเช่น System.String.* : _
แสดง API ทั้งหมดของประเภท System.String
> System.String.* : _
System.Array.Length : int, instance property with get, mscorlib
System.Collections.BitArray.Length : int, instance property with get set, mscorlib
System.ComponentModel.DataObjectFieldAttribute.Length : int, instance property with get, System
System.ComponentModel.MaskedTextProvider.Length : int, instance property with get, System
...
คำอธิบายพารามิเตอร์ประเภทมีสามประเภท:
รูปแบบ | ตัวอย่าง | พารามิเตอร์ประเภท | หมายเหตุ |
---|---|---|---|
<t> : signature | <TKey, TValue> : Dictionary<TKey, TValue> | TKey , TValue | ตัวอักษรตัวพิมพ์ใหญ่สามารถใช้ในพารามิเตอร์ประเภทในรูปแบบรายละเอียดได้ |
ตัวพิมพ์เล็กทั้งหมด | Dictionary<tkey, tvalue> | tkey , tvalue | หากตัวอักษรทั้งหมดเป็นตัวพิมพ์เล็ก คุณสามารถละส่วน <T> ได้ |
ตัวละครตัวหนึ่ง | List<T> -> int | T | หากเป็นอักขระเดี่ยว สามารถละเว้นส่วน <T> ได้ |
อย่างไรก็ตาม แม้ว่าจะเป็นตัวพิมพ์เล็กทั้งหมดก็ตาม ประเภทที่มีอยู่แล้วภายใน เช่น int และ string จะไม่ถือเป็นพารามิเตอร์ประเภท
ชื่อพารามิเตอร์ประเภทในการสืบค้นไม่จำเป็นต้องตรงกับชื่อพารามิเตอร์ประเภทที่กำลังค้นหา ตัวอย่างเช่น การสืบค้น List<A>
ตรงกับประเภท System.Collections.Generics.List<T>
โดยปกติแล้ว พารามิเตอร์ประเภทเช่น T
และชื่อประเภทเช่น int
จะไม่ตรงกัน อย่างไรก็ตาม คุณอาจต้องการค้นหาทั้งสองกรณีพร้อมกัน ในกรณีเช่นนี้ คุณสามารถใช้ ?
ได้
> <T> : List<T> -> ? -> int
System.Collections.Generic.List<T>.BinarySearch(T item) : int, instance method, mscorlib
System.Collections.Generic.List<T>.FindIndex(Predicate<T> match) : int, instance method, mscorlib
System.Collections.Generic.List<T>.FindLastIndex(Predicate<T> match) : int, instance method, mscorlib
System.Collections.Generic.List<T>.IndexOf(T item) : int, instance method, mscorlib
...
นอกจากนี้ ด้วยการตั้งชื่อไวด์การ์ด คุณสามารถเพิ่มเงื่อนไขว่าชื่อประเภทเดียวกันจะปรากฏในตำแหน่งไวด์การ์ดที่มีชื่อเดียวกัน ตัวอย่างเช่น ? -> ?
ตรงกับข้อมูลทั้งหมดต่อไปนี้:
static T F1<T>(T x)
static int F2 (int x)
static T F3<T>(int x)
static int F4 (string x)
อย่างไรก็ตาม หากคุณตั้งชื่อเป็น ?a -> ?a
ตัวอย่างด้านบนจะไม่ตรงกับ F2
หรือ F4
การค้นหาประเภทย่อยเป็นข้อจำกัดที่ระบุประเภทที่เข้ากันได้กับประเภทพื้นฐานหรืออินเทอร์เฟซที่ระบุ
หากต้องการใช้การค้นหาประเภทย่อยในการสืบค้น ให้เขียน #type
คุณสามารถระบุชื่อประเภทและชื่ออินเทอร์เฟซในส่วน type
ได้ ไม่สามารถระบุพารามิเตอร์ประเภทและไวด์การ์ดในชื่อประเภทได้
ตัวอย่างเช่น <T> : ? -> #IEnumerable<T>
สามารถค้นหาวิธีการที่สืบทอดมาจาก IEnumerable<T>
และประเภทการส่งคืน เช่น List<T>
, IList<T>
และ T[]
หากต้องการค้นหาเมธอด ให้เขียน receiver -> (arg) -> returnType
วิธีการหลายข้อโต้แย้งถูกเขียนเป็น receiver -> (arg1, arg2) -> returnType
วงเล็บในส่วนอาร์กิวเมนต์สามารถละเว้นได้ หากคุณต้องการค้นหา API ที่ไม่มีอาร์กิวเมนต์หรือค่าที่ส่งคืน ให้ใช้ ()
และ void
> <T> : List<T> -> T -> int
System.Collections.Generic.List<T>.BinarySearch(T item) : int, instance method, mscorlib
System.Collections.Generic.List<T>.IndexOf(T item) : int, instance method, mscorlib
...
หากต้องการค้นหาคุณสมบัติ ให้เขียน receiver -> propertyType
คุณสมบัติที่จัดทำดัชนีจะถูกเขียนเป็น receiver -> index -> propertyType
> <T> : List<T> -> int
System.Collections.Generic.List<T>.Capacity : int, instance property with get set, mscorlib
System.Collections.Generic.List<T>.Count : int, instance property with get, mscorlib
...
หากต้องการค้นหาวิธีการ ให้เขียน (arg) -> returnType
เมื่อค้นหาคุณสมบัติ ให้เขียน propertyType
> string -> int
System.Convert.ToInt32(string value) : int, static method, mscorlib
System.Int32.Parse(string s) : int, static method, mscorlib
...
ด้วยวิธีนี้ ชนิดที่สมาชิกเป็นสมาชิกไม่ได้ระบุไว้ในแบบสอบถามสมาชิกแบบคงที่