Zrobiłem kilka eksperymentów z kompilatorem F # i oto kilka moich obserwacji. Jeśli chcesz utworzyć literał IL, musisz umieścić w nim wartość oznaczoną jako Literal
. Na przykład tak:
module Constants =
[<Literal>]
let Num = 1
Jako marginesie, zrobiłem szybkie wyszukiwanie poprzez doprecyzowanie F # i wydaje się, że literały mogą być bardzo przydatne do wyszukiwania wzorca, ponieważ można ich używać jako wzorzec (jak dopóki zaczynają się wielką literą):
open Constants
match 1 with
| Num -> "1"
| _ -> "other"
teraz pytanie brzmi, dlaczego Literal
nie zachowuje się jak można się spodziewać, gdy go umieścić wewnątrz deklaracji typu. Myślę, że powodem jest to, że deklaracja let
wewnątrz deklaracji typu F # nie może być publiczna i będzie widoczna tylko wewnątrz klasy/typu. Wierzę, że zarówno wartości literowe C# i F # inline podczas korzystania z nich i odbywa się to również wewnątrz deklaracji typu. Ponieważ jednak literał nie może być publiczny, nie ma powodu do generowania pola IL, ponieważ nikt nie miałby do niego dostępu.
Zadałem to pytanie - http://stackoverflow.com/questions/1834923/f-public-literal - a Chris Smith wskazał, że nie jest to możliwe. – Daniel