Mesin Pencari F# API adalah mesin pencari yang memungkinkan Anda mencari F# API berdasarkan tanda tangan atau nama.
nama proyek | ringkasan |
---|---|
Pencarian FSharpApi | Tubuh mesin pencari |
FSharpApiSearch.Database | Alat pembuatan database mesin pencari |
FSharpApiSearch.Konsol | Bagian depan mesin pencari (aplikasi konsol) |
Unduh file zip dari halaman rilis dan ekstrak.
Pertama, jalankan FSharpApiSearch.Database.exe untuk membuat database.
FSharpApiSearch.Database.exe
Majelis yang dapat dicari secara default adalah FSharp.Core
, mscorlib
, System
, dan System.Core
. Anda dapat menambahkan target pencarian dengan menentukan rakitan saat membuat database. Anda dapat menentukan direktori untuk mencari rakitan dengan opsi --lib
. Harap tentukan juga rakitan yang menjadi tempat bergantungnya rakitan tersebut.
FSharpApiSearch.Database.exe --lib:TargetAssemblyDirectory TargetAssembly1 TargetAssembly2 DependentAssembly
Jika Anda menjalankan FSharpApiSearch.Console.exe tanpa memberinya kueri, FSharpApiSearch.Console.exe akan dimulai dalam mode interaktif. Ketik #q
untuk keluar dari mode interaktif.
FSharpApiSearch.Console.exe
Jika Anda meneruskan kueri sebagai argumen, pencarian hanya akan dilakukan satu kali.
FSharpApiSearch.Console.exe "int -> int"
Gunakan opsi --target
untuk benar-benar menggunakan database yang dibuat untuk pencarian.
FSharpApiSearch.Console.exe --target:TargetAssembly1 --target:TargetAssembly2
Jika Anda menggunakan opsi --target
, FSharp.Core
, mscorlib
, System
, dan System.Core
default tidak akan disertakan dalam target pencarian, jadi jika Anda ingin memasukkannya ke dalam target pencarian, tentukan secara eksplisit.
FSharpApiSearch.Console.exe --target:TargetAssembly1 --target:TargetAssembly2 --target:FSharp.Core --target:mscorlib --target:System --target:System.Core
respect-name-difference
Jika opsi respect-name-difference
diaktifkan, pencarian akan menghormati perbedaan dalam nama variabel tipe berbeda dan wildcard bernama dalam kueri. Nama yang berbeda tidak cocok dengan tipe yang sama. Misalnya, kueri ?a -> ?a
cocok dengan tanda tangan int -> int
, tetapi kueri ?a -> ?b
tidak cocok dengan int -> int
.
Jika opsi ini dinonaktifkan, kueri ?a -> ?b
akan cocok dengan int -> int
.
greedy-matching
Jika opsi greedy-matching
diaktifkan, variabel tipe dan tipe lainnya akan dicocokkan satu per satu, dan hasilnya akan diurutkan dan ditampilkan dalam urutan pencocokan menurun. Selain itu, batasan jenis kini diperhitungkan dalam penelusuran.
ignore-param-style
Ada dua jenis format argumen untuk fungsi dan metode: format kari ( arg1 -> arg2 -> returnType
) dan format tupel ( arg1 * arg2 -> returnType
). Jika opsi ignore-param-style
diaktifkan, kecocokan akan mengabaikan format kari dan tupel.
ignore-case
Jika opsi ignore-case
diaktifkan, huruf besar/kecil akan diabaikan saat mencocokkan nama API dan nama tipe.
substring
Jika opsi substring
diaktifkan, pencarian berdasarkan substring.
swap-order
Jika opsi swap-order
diaktifkan, pencarian akan menukar urutan argumen dan tupel. Misalnya, kueri a -> b -> c
cocok dengan b -> a -> c
.
complement
Jika opsi complement
diaktifkan, selesaikan dan cari argumen dan elemen tuple yang hilang. Misalnya, kueri a * c
cocok dengan a * b * c
.
single-letter-as-variable
Jika opsi single-letter-as-variable
diaktifkan, nama tipe satu huruf diperlakukan sebagai nama variabel tipe. Misalnya, kueri t list
sama dengan 't list
.
language
Mengalihkan kueri, pencarian, dan tampilan hasil ke bahasa pemrograman yang ditentukan oleh opsi language
. Opsi ini menerima F# dan C#.
xmldoc
Jika opsi xmldoc
diaktifkan, menampilkan dokumen XML di hasil pencarian.
Kueri F# pada dasarnya sama dengan tanda tangan F#. Hanya ekstensi FSharpApiSearch yang akan dijelaskan secara detail.
>
adalah perintah saat Anda memulai FSharpApiSearch.Console.exe dalam mode interaktif.
API | Contoh kueri |
---|---|
Fungsi dan nilai modul | int -> string |
catatan, bidang struktur | Ref<'a> -> 'a |
persatuan yang didiskriminasi | 'a -> Option<'a> |
anggota | 'a list -> int |
konstruktor | Uri : _ Uri.new : _ Uri..ctor : _ |
Nama (nama fungsi, nama anggota, dll.) | head : 'a list -> 'a head |
pola aktif | (||) : ... -> Expr -> ? |
Jenis, jenis singkatan, modul | List<'T> |
ekspresi perhitungan | { let! } : Async<'T> |
Pencarian subtipe | #seq<'a> -> 'a |
Untuk mencari berdasarkan nama, tulis name : signature
atau name
. Jika Anda tidak menentukan tanda tangan, tentukan _
di bagian tanda tangan.
> 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
Gunakan tanda bintang ( *
) untuk mencari kecocokan sebagian. Misalnya, FSharp.Core.String.* : _
menampilkan semua API modul 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
...
Biasanya, tipe variabel seperti 'a
dan nama tipe seperti int
tidak cocok. Namun, Anda mungkin ingin mencari kedua kasus tersebut sekaligus. Dalam kasus seperti itu, Anda dapat menggunakan wildcard ?
atau _
.
> ? -> 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
...
Selain itu, dengan memberi nama wildcard, Anda dapat menambahkan ketentuan bahwa nama tipe yang sama akan muncul di posisi wildcard dengan nama yang sama. Misalnya, ? -> ?
cocok dengan semua fungsi berikut:
'a -> 'a
int -> int
'a -> int
int -> string
Namun, jika Anda menamainya seperti ?a -> ?a
, contoh di atas tidak akan cocok dengan 'a -> int
atau int -> string
.
Pencarian subtipe adalah batasan yang menentukan tipe yang kompatibel dengan tipe dasar atau antarmuka tertentu.
Untuk menggunakan pencarian subtipe dalam kueri, tulis #type
. Anda dapat menentukan nama tipe dan nama antarmuka di bagian type
. Parameter tipe dan wildcard tidak dapat ditentukan dalam nama tipe.
Misalnya, ? -> #seq<'T>
dapat mencari fungsi yang mewarisi dari seq<'T>
mengembalikan tipe seperti List<'T>
, IList<'T>
, dan 'T[]
.
Untuk mencari anggota instance, tulis receiver -> signature
.
Saat mencari metode, tulis receiver -> arg -> returnType
.
Untuk mencari metode multi-argumen, tulis receiver -> arg1 -> arg2 -> returnType
atau receiver -> arg1 * arg2 -> returnType
. Biasanya, argumen metode dicari dalam format tuple ( arg1 * arg2
) dan format kari ( arg1 -> arg2
) tanpa membedakannya. Jika Anda ingin mencari berdasarkan format argumen, nonaktifkan opsi ignore-param-style
.
Untuk mencari properti, tulis receiver -> propertyType
. Properti yang diindeks ditulis sebagai receiver -> index -> propertyType
.
Anggota statis dapat dicari dengan kueri yang sama dengan nilai dan fungsi dalam modul. Metode multi-argumen ditulis seperti metode instan arg1 -> arg2 -> returnType
atau arg1 * arg2 -> returnType
.
Untuk mencari pola aktif, tulis (||) : (args ->) inputType -> returnType
. Untuk mencari pola yang sebagian aktif, tulis (|_|) : (args ->) inputType -> returnType
.
Di bagian inputType
, tentukan tipe yang ditangani oleh pola aktif. Misalnya, jika Anda ingin mencari pola aktif untuk Expr
tulis (||) : ... -> Expr -> ?
Tentukan argumen pola aktif di bagian args
. Jika Anda ingin mencari pola aktif dengan argumen, tulis (||) : arg1 -> arg2 -> inputType -> returnType
. Jika Anda ingin mencari pola aktif tanpa argumen, tulis (||) : inputType -> returnType
. Jika Anda ingin mencari tanpa membedakan ada atau tidaknya argumen, gunakan kata kunci ...
di bagian argumen dan tulis (||) : ... -> inputType -> returnType
.
Bagian retyrnType
menentukan tipe yang dikembalikan oleh fungsi, yang merupakan pola aktif sebenarnya. Nilai kembalian fungsi pola aktif berbeda untuk pola tunggal, ganda, dan aktif sebagian. Harap tentukan jenis apa pun yang sesuai, option<_>
, Choice<_,...,_>
. Biasanya disarankan untuk menggunakan wildcard ( ?
).
Untuk mencari ekspresi komputasi, tuliskan { syntax } : type
. Menemukan pembuat yang dapat menangani sintaks dan tipe yang ditentukan.
syntax
dapat mencakup let!
, yield
, yield!
, return
, return!
, use
, use!
, if/then
, for
, while
, try/with
, try/finally
dan nama operasi khusus apa pun. Jika Anda ingin menentukan beberapa syntax
, pisahkan dengan ;
dan tuliskan { s1; s2 } : type
.
Kueri C# memiliki sintaksis yang berbeda dari tanda tangan C#.
API | Contoh kueri |
---|---|
anggota | object -> () -> string string -> int |
konstruktor | Uri : _ Uri..ctor : _ |
tipe parameter | List<T> -> int Dictionary<tkey, tvalue> <TKey, TValue> : Dictionary<TKey, TValue> |
Nama (nama anggota, dll.) | Length : string -> int Length |
cetakan | List |
Pencarian subtipe | <T> : #IEnumerable<T> -> T |
Untuk mencari anggota atau mengetik berdasarkan nama, tulis name : signature
atau name
. Jika Anda tidak menentukan tanda tangan, tentukan _
di bagian tanda tangan.
> 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
...
Gunakan tanda bintang ( *
) untuk mencari kecocokan sebagian. Misalnya, System.String.* : _
menampilkan semua API bertipe 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
...
Ada tiga jenis deskripsi parameter tipe:
format | contoh | tipe parameter | perkataan |
---|---|---|---|
<t> : signature | <TKey, TValue> : Dictionary<TKey, TValue> | TKey , TValue | Huruf besar dapat digunakan dalam parameter tipe dalam bentuk verbose |
semua huruf kecil | Dictionary<tkey, tvalue> | tkey , tvalue | Jika semua hurufnya kecil, Anda dapat menghilangkan bagian <T> . |
satu karakter | List<T> -> int | T | Jika karakternya tunggal, bagian <T> dapat dihilangkan. |
Namun, meskipun semuanya huruf kecil, tipe bawaan seperti int dan string tidak diperlakukan sebagai parameter tipe.
Nama parameter tipe dalam kueri tidak harus cocok dengan nama parameter tipe yang dicari. Misalnya, kueri List<A>
cocok dengan tipe System.Collections.Generics.List<T>
.
Biasanya, parameter tipe seperti T
dan nama tipe seperti int
tidak cocok. Namun, Anda mungkin ingin mencari kedua kasus tersebut sekaligus. Dalam kasus seperti itu, Anda dapat menggunakan ?
.
> <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
...
Selain itu, dengan memberi nama wildcard, Anda dapat menambahkan ketentuan bahwa nama tipe yang sama akan muncul di posisi wildcard dengan nama yang sama. Misalnya, ? -> ?
cocok dengan semua hal berikut:
static T F1<T>(T x)
static int F2 (int x)
static T F3<T>(int x)
static int F4 (string x)
Namun jika diberi nama seperti ?a -> ?a
, contoh di atas tidak akan cocok dengan F2
atau F4
.
Pencarian subtipe adalah batasan yang menentukan tipe yang kompatibel dengan tipe dasar atau antarmuka tertentu.
Untuk menggunakan pencarian subtipe dalam kueri, tulis #type
. Anda dapat menentukan nama tipe dan nama antarmuka di bagian type
. Parameter tipe dan wildcard tidak dapat ditentukan dalam nama tipe.
Misalnya, <T> : ? -> #IEnumerable<T>
dapat mencari metode yang mewarisi dari IEnumerable<T>
dan mengembalikan tipe seperti List<T>
, IList<T>
, dan T[]
.
Untuk mencari metode, tulis receiver -> (arg) -> returnType
. Metode multi-argumen ditulis sebagai receiver -> (arg1, arg2) -> returnType
. Tanda kurung pada bagian argumen dapat dihilangkan. Jika Anda ingin mencari API yang tidak memiliki argumen atau nilai kembalian, gunakan ()
dan 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
...
Untuk mencari properti, tulis receiver -> propertyType
. Properti yang diindeks ditulis sebagai 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
...
Untuk mencari metode, tulis (arg) -> returnType
. Saat mencari properti, tulis propertyType
.
> string -> int
System.Convert.ToInt32(string value) : int, static method, mscorlib
System.Int32.Parse(string s) : int, static method, mscorlib
...
Dengan cara ini, tipe anggota tidak disebutkan dalam kueri anggota statis.