dev*_*ium 1 .net f# functional-programming
我很高兴在我的代码上使用以下DU
type Token =
| LET of Position
| WS of Position
| IDENTIFIER of Position * string
| EQ of Position
| NEWLINE of Position
| PLUS of Position
| MINUS of Position
| TIMES of Position
| DIV of Position
| OPEN_BRACE of Position
| CLOSE_BRACE of Position
| INT32 of Position * int32
| FLOAT32 of Position * float32
Run Code Online (Sandbox Code Playgroud)
直到我遇到需要Position从通用token变量中提取出来的情况.根据我的理解,除了直接将其重构为类似的东西之外,没有其他选择
type TokenType =
| LET
| WS
| IDENTIFIER of string
| EQ
| NEWLINE
| PLUS
| MINUS
| TIMES
| DIV
| OPEN_BRACE
| CLOSE_BRACE
| INT32 of int32
| FLOAT32 of float32
type Token = Token of Position * TokenType
Run Code Online (Sandbox Code Playgroud)
对?定义一个
let position = function
| LET(pos) -> pos
| WS(pos) -> pos
...
Run Code Online (Sandbox Code Playgroud)
会太痛苦了.或者我错过了什么?
使用重构类型更有意义,因为position不是令牌类型的特定属性,而是令牌的一般属性.
在这里使用元组是最好的,但是如果你需要添加更多属性,我实际上会使用记录(也许你会在继续开发时发现它):
type Token = { Token_type: TokenType;
Position: int;
Length: int;
...
}
Run Code Online (Sandbox Code Playgroud)