Facebook Twitter LinkedIn E-mail
magnify
Home F# F#开发教程(11):函数化编程(十)
formats

F#开发教程(11):函数化编程(十)

Published on 2016 年 08 月 28 日

计量单位

F#的类型系统有个非常有趣的功能是支持计量单位。支持给数值添加计量单位。目的是避免在使用数值时错误的引用。比如把一个单位为厘米的长度数据和单位为英寸的长度数据未经转换直接相加。
F#使用属性来定义一个计量单位,比如定义m为长度单位。

[<Measure>]type m

然后你就可以使用这个单位来定义数值,比如

> let meters = 10<m>;;

val meters : int<m> = 10

比如之前我们使用联合定义多种计量单位,我们换用属性

> [<Measure>]type pint;;

[<Measure>]
type pint

> [<Measure>]type liter;;

[<Measure>]
type liter

> let vol1 = 2.5<liter>;;

val vol1 : float<liter> = 2.5

> let vol2 = 2.5<pint>;;

val vol2 : float<pint> = 2.5

> let newVol = vol1 + vol2;;

  let newVol = vol1 + vol2;;
  --------------------^^^^

/Users/James/stdin(43,21): error FS0001: The unit of measure 'pint' does not match the unit of measure 'liter'

可以看到把两个使用不同计量单位的数值相加,系统报错。
你可以定义转换成统一的计量单位,然后在计算。

// define some units of measure
[<Measure>]type liter
[<Measure>]type pint
// define some volumes
let vol1 = 2.5<liter>
let vol2 = 2.5<pint>
// define the ratio of pints to liters
let ratio =  1.0<liter> / 1.76056338<pint>

 
Tags:
 Share on Facebook Share on Twitter Share on Reddit Share on LinkedIn