Этот вопрос касается символов в идентификаторах, а не keywords as identifiers.Какие символы разрешены в идентификаторах F #, имени модуля, типа и имени?
Я нашел this question on C# names, но не смог найти то же самое на F #. Как правило, это вряд ли уместно, но в моих тестах имен я часто использую точку .
и был удивлен, что не было поддержано в имени модуля, но поддерживается в LET-связывания:
// fails:
module ``Run Test.Me functions`` =
[<Test>]
let ``X.Add should add``() = test <@ X.Add 2 2 = 4 @>
// Succeeds
module ``Run Test-Me functions``
[<Test>]
let ``X.Add should add``() = test <@ X.Add 2 2 = 4 @>
Вне называния испытаний Я не вижу много пользы для этого, но это заставило меня задуматься: какие символы поддерживаются именами типов и модулей, а также какие символы для имен членов и привязки?
Некоторые тесты:
module ``Weird.name`` =() // fails
module ``Weird-name`` =() // succeeds
module ``Weird()name`` =() // succeeds (?)
module ``Weird*name`` =() // fails
module ``Weird+name`` =() // fails
module ``Weird%name`` =() // succeeds (?)
module ``Weird/name`` =() // fails
module ``Weird\\name`` =() // fails
Все эти названия успеха в имени элемента пусть обязывающего или, но не в качестве имени типа или имя модуля. По крайней мере, это непротиворечиво. Но я не могу найти ни одной строки или логики в том, что разрешено, а что нет
Возможно, ограничение наложено CLR/MSIL, а не самой F #?
@guy, у меня случается, что спецификация lang открыта на моем другом экране, не знаю почему я этого не заметил. Вы можете захотеть превратить это в ответ, не думайте, что это должно быть плохо, чтобы иметь его здесь как Q & A, даже если кто-нибудь может найти его в спецификации (но, честно говоря, эту вещь трудно читать!) – Abel