我正在尝试为自然语言解析器返回的部分语音标签和其他标签创建一个区别对齐的联合。
在C#/ Java中使用字符串或枚举很常见,但有区别的联合似乎更适合F#,因为这些是不同的只读值。
在语言参考中,我发现了这个符号
``...``
可用于分隔关键字/保留字。这适用于
type ArgumentType =
| A0 // subject
| A1 // indirect object
| A2 // direct object
| A3 //
| A4 //
| A5 //
| AA //
| ``AM-ADV``
然而,标签包含像$这样的符号,例如
type PosTag =
| CC // Coordinating conjunction
| CD // Cardinal Number
| DT // Determiner
| EX // Existential there
| FW // Foreign Word
| IN // Preposision or subordinating conjunction
| JJ // Adjective
| JJR // Adjective, comparative
| JJS // Adjective, superlative
| LS // List Item Marker
| MD // Modal
| NN // Noun, singular or mass
| NNP // Proper Noun, singular
| NNPS // Proper Noun, plural
| NNS // Noun, plural
| PDT // Predeterminer
| POS // Possessive Ending
| PRP // Personal Pronoun
| PRP$ //$ Possessive Pronoun
| RB // Adverb
| RBR // Adverb, comparative
| RBS // Adverb, superlative
| RP // Particle
| SYM // Symbol
| TO // to
| UH // Interjection
| VB // Verb, base form
| VBD // Verb, past tense
| VBG // Verb, gerund or persent participle
| VBN // Verb, past participle
| VBP // Verb, non-3rd person singular present
| VBZ // Verb, 3rd person singular present
| WDT // Wh-determiner
| WP // Wh-pronoun
| WP$ //$ Possessive wh-pronoun
| WRB // Wh-adverb
| ``#``
| ``$``
| ``''``
| ``(``
| ``)``
| ``,``
| ``.``
| ``:``
| `` //not sure how to escape/delimit this
``...``
不适用于WP $或符号(
另外,我有一个有趣的问题,解析器将``作为一个有意义的符号返回,所以我也需要将其转义。
是否有其他方法可以做到这一点,或者这是否与歧视的联盟不可能?
现在我遇到了像
这样的错误我想我可以以某种方式覆盖toString这些愚蠢的情况,并用一些字母数字等价物替换符号?
答案 0 :(得分:1)
规范似乎并不清楚在什么情况下允许在双反引号中转义哪些字符。
我认为您最好的选择是为DU案例使用标准标识符,并按照建议覆盖ToString
。
答案 1 :(得分:1)
根据我的经验,只有let Bindings或type members才能完全支持双重反引号标记。这意味着你可以放入任何字符序列(除了为F#codegen保留的@
字符)。
当你想在模块,类型或DU案例定义中使用它们作为标识符时,它不能很好地播放,因为不支持某些字符。
E.g。 .
,/
,*
,+
,$
,[
,]
,\
或{{ 1}}生成“无效的命名空间,模块,类型或联合案例名称”错误。