這個問題是關於標識符中的字符,而不是keywords as identifiers。我發現this question on C# names,但在F#上找不到相同的東西。通常,這是沒有什麼關係的,但是在我的測試命名我經常使用的點.
,驚訝它不是在一個模塊名稱支持,但在let結合支持:命名測試F#標識符,模塊,類型和成員名稱中允許使用哪些字符?
// 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 spec,不知道爲什麼我沒有發現它。你可能想把它變成一個答案,即使有人可以在規範中找到答案,也不要認爲它應該在這裏作爲問答(儘管如此,這件事很難閱讀!) – Abel