Pet*_*ner 3 f# units-of-measurement discriminated-union
是否可以通过F#中的测量单位标签创建区分联合类型?
我想写... 如下:
type DomainObject =
| Pixel of int
| ScaledPixel of int
| Centimeter of float
| Unset
let var1 = 10<px> // should equal: let var1 = Pixel(10)
let var2 = 0<us> // should equal: let var2 = Unset
let process sth =
match sth with
| Pixel(p) -> ...
| Centimeter(c) -> ...
// etc.
Run Code Online (Sandbox Code Playgroud)
使用NumericLiterals这样的事情是可能的.但是,人们只能使用Neil P.表示的少量文字.
正如我在评论中所说,简单的答案是否定的.
在某种程度上,您试图滥用一个F#功能(度量单位)来模拟其他语言(后缀运算符)中可能存在的功能,这可能是一件坏事,因为(即使它有可能),结果代码会很混乱.
如果您只想反转参数的顺序以使数字位于单元名称之前,则可以使用管道运算符并写入:
let var1 = 10 |> Pixel
let var2 = Unset
Run Code Online (Sandbox Code Playgroud)
这基本上为您提供了一种编写"后缀运算符"的方法,但使用标准的F#惯用法.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |